通过模型设置 has_many 的限制
Setting limitations across has_many through models
这些是我的模型:
class User < ActiveRecord::Base
has_many :memberships
has_many :groups, through: :memberships
end
class Group < ActiveRecord::Base
has_many : memberships
has_many :users, through: :memberships
belongs_to :group_type
end
class Membership < ActiveRecord::Base
belongs_to :user
belongs_to :group
end
class GroupType < ActiveRecord::Base
has_many :groups
end
我想为用户分配群组。群组有多种类型,用户只能从每种类型中选择一个群组。在视图中,每个组类型都应该有一个 select 标记(用户不必是每个组类型的成员)。
我可以在成员模型中添加一个 type_id 列,并为每个新用户的每个组创建一个实例,然后更新行,例如(对于类型 1):
<%= form_for (@user) do |f|
<% @membership = Membership.where (user_id: :@user.id, group_type: :1) %>
<%= f.collection_select (:membership, :group_id, Group.all.where(type: 1), :id, :name) %>
<% end %>
(不确定是否有效)
无论如何,我确定有更好的方法.. 如何将模型与每个类型限制的一组连接起来? (当然,还有一种编辑现有会员资格的方法)。
我会感谢任何帮助...
谢谢!
你的模型结构看起来不错。您还可以在成员资格中包含 group_type,然后验证唯一性。
class Membership < ActiveRecord::Base
belongs_to :user
belongs_to :group
belongs_to :group_type
validates :user_id, uniqueness: { scope: [:group_id, :group_type_id],
message: "can only join one group of this type." }
end
表单应创建一个成员。
<%= form_for (Membership.new) do |f|
<%= f.hidden_field :user_id, value: @user.id %>
<%# your selection for a group %>
<% end %>
在控制器中,您必须从数据库加载组,然后将 group_type_id 添加到参数和 .save -> 验证将处理其余部分。
这些是我的模型:
class User < ActiveRecord::Base
has_many :memberships
has_many :groups, through: :memberships
end
class Group < ActiveRecord::Base
has_many : memberships
has_many :users, through: :memberships
belongs_to :group_type
end
class Membership < ActiveRecord::Base
belongs_to :user
belongs_to :group
end
class GroupType < ActiveRecord::Base
has_many :groups
end
我想为用户分配群组。群组有多种类型,用户只能从每种类型中选择一个群组。在视图中,每个组类型都应该有一个 select 标记(用户不必是每个组类型的成员)。
我可以在成员模型中添加一个 type_id 列,并为每个新用户的每个组创建一个实例,然后更新行,例如(对于类型 1):
<%= form_for (@user) do |f|
<% @membership = Membership.where (user_id: :@user.id, group_type: :1) %>
<%= f.collection_select (:membership, :group_id, Group.all.where(type: 1), :id, :name) %>
<% end %>
(不确定是否有效)
无论如何,我确定有更好的方法.. 如何将模型与每个类型限制的一组连接起来? (当然,还有一种编辑现有会员资格的方法)。
我会感谢任何帮助...
谢谢!
你的模型结构看起来不错。您还可以在成员资格中包含 group_type,然后验证唯一性。
class Membership < ActiveRecord::Base
belongs_to :user
belongs_to :group
belongs_to :group_type
validates :user_id, uniqueness: { scope: [:group_id, :group_type_id],
message: "can only join one group of this type." }
end
表单应创建一个成员。
<%= form_for (Membership.new) do |f|
<%= f.hidden_field :user_id, value: @user.id %>
<%# your selection for a group %>
<% end %>
在控制器中,您必须从数据库加载组,然后将 group_type_id 添加到参数和 .save -> 验证将处理其余部分。