通过关系编辑has_many的多个条目

时间:2014-07-03 12:47:21

标签: ruby-on-rails simple-form

我正在为我的rails应用程序构建一个会员系统,并拥有以下模型(没有验证和其他所有内容):

class User < ActiveRecord::Base
  has_many :memberships
  has_many :subgroups, through: :memberships
end

class Subgroup < ActiveRecord::Base
  has_many :memberships
  has_many :users, through: :memberships
end

成员资格模型包含一个自定义属性,该属性包含成员资格级别。

class Membership < ActiveRecord::Base
  belongs_to :subgroup
  belongs_to :user

  scope :guests, -> { where( role: 0 ) }
  scope :users, -> { where( role: 1 ) }
  scope :admins, -> { where( role: 2 ) }
end

我希望用户能够在一个地方编辑一个组的所有成员资格。每个组应该有三个多选字段来选择管理员,用户和&amp;客人。为了生成表单,我使用simple_form。

它应该看起来像this,但是填充了用户名(应该是简单的部分)和每个用户级的预选用户。

f.association等不同的内置解决方案不起作用。我为:users(生成三个相同的选择字段)和:memberships尝试了此操作。

所以我正在寻求建立视图和帮助的帮助;控制器。

1 个答案:

答案 0 :(得分:1)

您必须使用子组中的范围,但不能使用成员资格

class User < ActiveRecord::Base
  has_many :memberships
  has_many :subgroups, through: :memberships

  scope :guests, -> { includes(:memberships).where('memberships.role' => 0) }
  scope :users,  -> { includes(:memberships).where('memberships.role' => 1) }
  scope :admins, -> { includes(:memberships).where('memberships.role' => 2) }
end

或者更好地与lambda wenn建立新关联,你不会使用simple_form

class Subgroup < ActiveRecord::Base
  has_many :memberships
  has_many :users, through: :memberships

  has_many :only_guests, -> { where('memberships.role' => 0).uniq }, through: :memberships, source: :user
  has_many :only_users,  -> { where('memberships.role' => 1).uniq }, through: :memberships, source: :user
  has_many :only_admins, -> { where('memberships.role' => 2).uniq }, through: :memberships, source: :user

end

视图:

<%= f.association :only_users, as: :check_boxes, collection: User.all %>