каждый вложенный цикл запрашивает неправильное имя столбца ... проблема модели? - PullRequest
0 голосов
/ 02 июня 2018

У меня есть страница, на которой отображаются «события», и у каждого события есть пользователи, которых можно разделить на группы ... модели выглядят так:

события:

 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)ВЫБЕРИТЕ "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 голосов
/ 02 июня 2018
<% 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 сообщает вам столбец в таблице other .Вы сказали, что ваш столбец назван event_users.group_id, поэтому belongs_to будет соответствовать имени поля, но, поскольку у вас нет класса с именем Group, вы должны явно указать ему, на какой класс он ссылается.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...