嵌套每个循环查询错误的列名...模型问题?

时间:2018-06-02 00:42:11

标签: ruby-on-rails activerecord

我有一个显示“事件”的页面,每个事件都有可以分组的用户......模型看起来像这样 -

事件:

 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”

所以我希望我可以更改以便使用正确的列名对嵌套的每个循环进行查询吗?

1 个答案:

答案 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的类,因此您必须明确告诉它它链接到哪个类。