Я пытаюсь выполнить один из домашних заданий от 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 ...
Как это исправить?