繁体   English   中英

Rails:嵌套的属性和模型?

[英]Rails: Nested Attributes & Model?

作为RoR的新手,我非常感谢您提前提供的所有协助! 尝试创建以下所需的模型时,我感到困惑。

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

乔恩| Org1 | 所有者

乔恩| 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

解决了:

在我的用户模型attr_accessible中添加了:orgs_attributes

我想创建一个名为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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM