首页 > 解决方案 > 嵌套每个循环查询错误的列名...模型问题?

问题描述

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

事件:

 has_many :users, through: :event_users
 has_many :event_users
 has_many :event_user_groups

事件用户:

 belongs_to :event
 belongs_to :user
 belongs_to :event_user_group, foreign_key: "group_id"

事件用户组:

  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”

那么我是否可以更改以便使用正确的列名对嵌套的每个循环进行查询?

标签: ruby-on-railsactiverecord

解决方案


<% 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_idevent_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您必须明确告诉它它链接到哪个类。


推荐阅读