我正在为我的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
尝试了此操作。
所以我正在寻求建立视图和帮助的帮助;控制器。
答案 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 %>