Rails:嵌套属性&模型?

时间:2012-02-27 02:22:02

标签: ruby-on-rails model nested-attributes

作为一名RoR新手,我非常感谢提前任何/所有帮助!在尝试创建以下所需的模型时,我会感到困惑。

我有3个对象:用户,组织和角色。用户可以属于一个或多个组织,但每个组织只有一个角色。例如:

Jon | Org1 |所有者

Jon | Org2 |雇员

鲍勃| Org1 |雇员

鲍勃| Org2 |所有者

我如何在我的模型中设置它(has_many,通过=>?)以及当我有一个编辑表单时,我能够更新用户信息,他们的组织和角色。同样的形式?注意:不确定是否相关,但我只打算允许那些所有者编辑他们的组织。

再次感谢!

修改 以下是我的内容,加上我现在收到的错误:

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

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

views / 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

1 个答案:

答案 0 :(得分:0)

我会创建一个名为UserOrganization的第四个模型,它具有以下属性: user_idorganization_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