2012-02-27 156 views
0

作爲RoR新手,我非常感謝任何/所有的援助提前!試圖創建以下需要的模型時,我很困惑自己。Rails:嵌套的屬性和模型?

我有3個對象:用戶,組織和角色。用戶可以屬於一個或多個組織,但每個組織只有1個角色。例如:

Jon | Org1 |所有者

Jon | Org2 |員工

Bob | Org1 |員工

Bob | Org2 |所有者

我該如何在我的模型中設置它(has_many,through =>?),並且當我有編輯表單時,我可以從內部更新用戶信息,組織和角色相同的形式?注意:不確定它是否恰當,但我只打算讓所有者編輯其組織。

再次感謝!

編輯 下面是我的本錢,再加上一個錯誤我現在得到:

型號/ 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 

型號/ org.rb

class Org < ActiveRecord::Base 
end 

models/role.rb

class Role < ActiveRecord::Base 
end 

型號/ 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 

的意見/ edit.html.erb

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

錯誤消息:

Can't mass-assign protected attributes: orgs_attributes 

解決:

補充:orgs_attributes我用戶模型,attr_accessible

回答

0

我會創建一個名爲UserOrganization的第四個模型,它具有以下屬性: user_id,organization_idrole_id。內UserOrganization模型我想有以下幾點:

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 

我們還有什麼存在將滿足您的用戶能夠屬於多個組織的標準,但最多隻有每組織一次,併爲每個協會他們必須有一個角色。

用戶,組織和角色的關聯應該與該實現相當直接(用戶有許多用戶組織)。如果你想通過用戶模型直接獲得組織,你也可以有has_many :organizations, :through => :user_organizations

而且你對編輯表單的問題,我建議你有一個瞭解accepts_nested_attributes_for

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

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

+0

謝謝!我很感激 – user464180 2012-02-27 03:45:08

+0

我添加了我的代碼和我收到的錯誤。如果你有時間並且可以評論,我會誠摯地感謝。再次感謝。 – user464180 2012-02-27 13:34:02

+0

我明白了。感謝您幫助我找到解決方案的正確途徑。 – user464180 2012-02-27 14:09:33