2012-02-27 8 views
0

En tant que débutant RoR, j'apprécie grandement toute assistance à l'avance! Je suis confus moi-même en essayant de créer les modèles nécessaires pour ce qui suit.Rails: attributs imbriqués et modèle?

J'ai 3 objets: Utilisateurs, Organisations et Rôles. Les utilisateurs peuvent appartenir à une ou plusieurs organisations, mais n'auront qu'un seul rôle par organisation. Par exemple:

Jon | Org1 | Propriétaire

Jon | Org2 | Employé

Bob | Org1 | Employé

Bob | Org2 | Propriétaire

Comment le configurer dans mes modèles (has_many, through =>?) Et aussi quand j'ai un formulaire d'édition, je peux mettre à jour les informations utilisateur, leurs organisations et leurs rôles de l'intérieur la même forme? Note: Je ne suis pas sûr que ce soit pertinent, mais j'ai seulement l'intention de permettre à ceux qui sont propriétaires de modifier leur organisation.

Merci encore!

EDIT Voici ce que j'ai, plus une erreur que je reçois maintenant:

modèles/user.rb

class User < ActiveRecord::Base 
    has_many :org_roles 
    has_many :orgs, :through => :org_roles 
    accepts_nested_attributes_for :orgs, :allow_destroy => true 
    has_one :user_detail 
    has_one :user_address 

    attr_accessible :orgs 
end 

modèles/org.rb

class Org < ActiveRecord::Base 
end 

models/role.rb

class Role < ActiveRecord::Base 
end 

modèles/org_role.rb

class OrgRole < ActiveRecord::Base 
    belongs_to :user 
    belongs_to :org 
    belongs_to :role 

    validates_presence_of :user, :org, :role 
    validates_uniqueness_of :org_id, :scope => :user_id 
end 

vues/edit.html.erb

#user form info above... 
    <%=f.fields_for :orgs do |ff| %> 
     <div>Your Organization Name:<br /> 
     <%= ff.text_field :name%></div> 
    <% end %> 

Message d'erreur:

Can't mass-assign protected attributes: orgs_attributes 

RESOLU:

Ajouté: orgs_attributes à mon modèle utilisateur, attr_accessible

Répondre

0

Je voudrais créer un quatrième modèle appelé UserOrganization qui a les attributs suivants: user_id, organization_id et role_id. Au sein du modèle UserOrganization j'aurais les suivantes:

class UserOrganization < ActiveRecord::Base 
    belongs_to :user 
    belongs_to :organization 
    belongs_to :role 

    validates_presence_of :user, :organization, :role 
    validates_uniqueness_of :organization_id, :scope => :user_id 
end 

Ce que nous avons là-bas satisferait vos critères d'utilisateurs pouvant appartenir à plusieurs organisations, mais seulement un maximum d'une fois par l'organisation, et pour chacune de ces associations ils doivent avoir un rôle présent. Les associations pour l'utilisateur, l'organisation et le rôle doivent être assez simples avec cette implémentation (l'utilisateur a plusieurs organisations d'utilisateurs). Si vous souhaitez obtenir des organisations directement à travers le modèle utilisateur, vous pouvez également avoir has_many :organizations, :through => :user_organizations.

également pour votre question sur le formulaire de modification je vous recommande avez lu sur accepts_nested_attributes_for:

http://apidock.com/rails/ActiveRecord/NestedAttributes/ClassMethods/accepts_nested_attributes_for

et

http://railscasts.com/episodes/196-nested-model-form-part-1

+0

Merci! J'apprécie – user464180

+0

J'ai ajouté mon code et une erreur que je reçois. Si vous avez le temps et pourrait passer en revue, je l'apprécierais sincèrement. Merci encore. – user464180

+0

Je l'ai eu. Merci de m'avoir aidé à trouver le bon chemin vers une solution. – user464180

Questions connexes