2012-02-27 144 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