Рельсовая ассоциация, inverse_of не работает - PullRequest
0 голосов
/ 08 февраля 2020

Я пытаюсь выполнить один из домашних заданий от Odin Projects. В этом я пытаюсь сделать связь между 2 моделями, User и Event, например, так:

Пользователь может создать много (то есть has_many) событий, и каждое событие принадлежит_ пользователю, который известен как создатель.

Класс пользователя:

class User < ApplicationRecord
  has_many :events, inverse_of: 'creator' 
end

Класс события:

class Event < ApplicationRecord
  belongs_to :creator,  class_name: 'User', inverse_of: 'events', foreign_key: "creator_id"
end

Миграция для добавления ссылки на таблицу событий:

class AddReferenceToEvents < ActiveRecord::Migration[5.2]
  def change
    add_reference :events, :creator, foreign_key: { to_table: :users }
  end
end

В настоящее время цель состоит в том, чтобы создавать и извлекать события через пользователя, но позже отношение должно измениться на то, где у каждого события есть несколько участников (Пользователь), и каждый пользователь может посетить несколько событий. Вот почему я использую creator_id вместо user_id. Но я до сих пор не выяснил ассоциаций, чтобы это произошло.

В консоли при попытке выполнить

@user.events

Я получаю ошибку:

SELECT  "events".* FROM "events" WHERE "events"."user_id" = ? LIMIT ?  [["user_id", 2], ["LIMIT", 11]]
Traceback (most recent call last):
ActiveRecord::StatementInvalid (SQLite3::SQLException: no such column: events.user_id: SELECT  "events".* FROM "events" WHERE "events"."user_id" = ? LIMIT ?)

И в представлении:

<% if !@user.events.empty? %>

Ошибка:

SQLite3::SQLException: no such column: events.user_id: SELECT  1 AS one FROM "events" WHERE "events"."user_id" = ? LIMIT ?

Вопросы :

  • Почему генерируется sql при попытке прочитать столбец user_id, когда я пытаюсь использовать creator_id?

  • Почему в представлении генерируется SQL SELECT 1 as one ...

  • Как это исправить?

...