我有一个显示“事件”的页面,每个事件都有可以分组的用户......模型看起来像这样 -
事件:
has_many :users, through: :event_users
has_many :event_users
has_many :event_user_groups
event_users:
belongs_to :event
belongs_to :user
belongs_to :event_user_group, foreign_key: "group_id"
event_user_groups:
belongs_to :event
has_many :event_users
因此,在我看来,我想循环遍历各个组,然后遍历每个组中的用户,这样我就可以显示每个组的子标题以及该组中的用户列表
<% @event.event_user_groups.each do |group| %>
<h4> <%= group.try(:name) %> </h4>
<% group.event_user.each do |user| %>
<%= user.try(:name) %>
<% end>
<% end >
问题是第二个循环执行的SQL是:
EventWine Load(0.3ms)SELECT“event_users”。* FROM“event_users” WHERE“event_users”。“event_user_group_id”= $ 1 [[“event_user_group_id”,7]]
和“event_user_group_id”不是列的名称....它应该是“group_id”
所以我希望我可以更改以便使用正确的列名对嵌套的每个循环进行查询吗?
答案 0 :(得分:1)
<% group.event_user.each do |user| %>
错了。它应该是group.event_users.each do |event_user|
。你说event_user_groups
has_many :event_users
。因此它将链接到event_users
表,并且是复数而不是单数。
如果列确实为has_many :event_users
,也请将has_many :event_users, foreign_key: :group_id
更改为event_users.group_id
。
您也可以添加
has_many :users, through: :event_users
要event_user_groups
直接转到用户集合。
查看has_many
http://api.rubyonrails.org/classes/ActiveRecord/Associations/ClassMethods.html#method-i-has_many
同时将belongs_to :event_user_group, foreign_key: "group_id"
更改为belongs_to :group, class_name: 'EventUserGroup'
。 foreign_key
会告诉您其他表中的列。您说您的列名为event_users.group_id
,因此belongs_to
将匹配字段名称,但由于您没有名为Group
的类,因此您必须明确告诉它它链接到哪个类。