Ruby on rails 通过关系编辑具有多个的多个条目
我正在为我的rails应用程序构建一个会员系统,并拥有以下模型(无需验证和其他一切):Ruby on rails 通过关系编辑具有多个的多个条目,ruby-on-rails,simple-form,Ruby On Rails,Simple Form,我正在为我的rails应用程序构建一个会员系统,并拥有以下模型(无需验证和其他一切): class用户{where(角色:2)} 结束 我希望用户能够在一个地方编辑一个组的所有成员资格。每个组应有三个多选择字段来选择管理员、用户和来宾。对于生成表单,我使用简单表单 它应该看起来像,但是填充了用户名(这应该是最简单的部分)和每个用户级别的预选用户 不同的内置解决方案,如f.association不起作用。我为:users(生成三个相同的select字段)和:memberships尝试了这个方法
class用户
成员资格模型包含一个保存成员资格级别的自定义属性
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
类成员资格{where(角色:0)}
作用域:用户,->{where(角色:1)}
作用域:admins,->{where(角色:2)}
结束
我希望用户能够在一个地方编辑一个组的所有成员资格。每个组应有三个多选择字段来选择管理员、用户和来宾。对于生成表单,我使用简单表单
它应该看起来像,但是填充了用户名(这应该是最简单的部分)和每个用户级别的预选用户
不同的内置解决方案,如f.association
不起作用。我为:users
(生成三个相同的select字段)和:memberships
尝试了这个方法
因此,我正在寻求有关构建视图和控制器的帮助。您必须在子组中使用作用域,但不能在成员资格中使用作用域
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
class用户{includes(:memberships).where('memberships.role'=>0)}
作用域:用户,->{includes(:memberships).where('memberships.role'=>1)}
作用域:admins,->{includes(:memberships).where('memberships.role'=>2)}
结束
或者最好与lambda wenn建立新的联系,你不会用简单的形式
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
类子组{where('memberships.role'=>0).uniq},通过::memberships,source::user
有很多:只有用户,->{where('memberships.role'=>1).uniq},通过::memberships,source::user
拥有_many:仅_管理员,->{where('memberships.role'=>2).uniq},通过::memberships,source::user
结束
视图:
当我使用simple_form时,我尝试在视图中使用
的第二种解决方案。但是它返回SQLite3::SQLException:没有这样的列:users.role:从“users”内部选择不同的“users”。*加入“users”上的“memberships”。“id”=“memberships”。“user\u id”其中的“users”。“role”=1和“memberships”。“subgroup\u id”=?
正确!您必须:has_many:only_users,->{where('memberships.role'=>1).uniq},通过::memberships,source::users,然后它不加入表。结果istSQLite3::SQLException:没有这样的列:memberships.role:从“memberships”中的“users”中选择不同的“users”。“role”=1
编辑:role是membership的属性,其中表是属性“role”?我必须使用
来显示SELECT字段。现在它起作用了。你能把这个加到你的答案里吗?
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 %>