2010-11-02 4 views
0

Je les deux modèles suivants dans mes espaces d'applications qui sont comme des projets & PermissionRails Construire un objet qui a un parent?

class Space < ActiveRecord::Base 
has_many :permissions 
has_many :users, :through => :permissions 

class Permission < ActiveRecord::Base 
    belongs_to :user 
    belongs_to :space 
    belongs_to :role 
    validates_presence_of :space_id , :user_id, :role_id 

Alors, voici ce que je voudrais faire, dans le contrôleur de l'espace, lorsque l'utilisateur ne crée DEF, je veux créer un espace, et une permission avec role_id = 1, pour assurer l'espace/projet en tant que créateur en tant que membre ...

Voici ce que j'ai. Il devient en désordre et ne pas créer l'autorisation

Controller Espace:

def create 
    @space = current_user.spaces.new(params[:space].merge(:creator => current_user.id)) 
    @space.permissions.new(:role_id => 1, :user_id => current_user.id) 
    respond_to do |format| 
    if @space.save 
    .. 
    .. 

Merci pour votre aide

+0

vous devriez le faire avec des rappels dans les modèles, pas dans votre contrôleur. Pouvez-vous être plus précis sur quand vous voulez que l'espace créé. Comme quand un nouvel utilisateur ou quand un nouvel espace est créé etc ... – s84

+0

@Sam. Merci. Que voulez-vous dire par les rappels dans les modèles? Pouvez vous donner un exemple? Thansk ... Je veux que cela se produise lorsqu'un utilisateur crée un nouvel espace. – AnApprentice

Répondre

2

Callbacks sont comment rails traite la logique métier qui applique aux modèles ou leurs associations après un des CRUD actes.

par exemple. Si vous voulez créer un espace avec 1 permission et que cette permission a un rôle, vous pouvez faire quelque chose comme ça.

dans votre modèle utilisateur

def before_create 
    User.permissions << Permision.create({:role_id => 1}) 
end 

Jetez un oeil à dos d'appel dans rails API. Ils enlèveront beaucoup de votre logique du contrôleur et le rendront plus facile à maintenir dans votre modèle.

Questions connexes