Rails ассоциация, которая определяет внешний ключ и где варианты - PullRequest
0 голосов
/ 04 июля 2019

Я пытаюсь связать две таблицы, в которых выполняется определенное условие.

Это схема типа «у пользователя есть книги в коллекции».Эта коллекция может быть library или wishlist .

Есть таблица пользователей (довольно стандартная), таблица книг (подробности не имеют значения) и таблица соединений, называемая collection_books, которая выглядит следующим образом:

id |user_id |book_id |collection_type

Используя Rails Docs в качестве ссылки, мой код выглядит следующим образом:

class User < ApplicationRecord
has_many :library_collection_books,
        foreign_key: :user_id,
        class_name: :CollectionBook,
        -> { where collection_type: 'library'}
end

vs пример кода Rails Docs:

class Parts < ApplicationRecord
  has_and_belongs_to_many :assemblies,
    -> { where "factory = 'Seattle'" }
end

Это ошибка, которую я получаю в консоли rails:

user.rb:36: syntax error, unexpected '\n', expecting =>

Я предполагаю, что это не относится к типу ассоциации has_and_belongs_to, поэтому проблема должна заключаться в синтаксисе того, как я задаю внешний ключи название класса.

Для записи, я могу просто сделать

has_many :collection_books,
   -> { where collection_type: 'library' }

, и это работает.Но мне понадобится эта ассоциация либо для библиотеки, либо для книг желаний.

1 Ответ

1 голос
/ 04 июля 2019

Лямбда -> { ... } должен быть первым аргументом (или вторым, в зависимости от того, как вы его считаете)

has_many :library_collection_books,
    -> { where collection_type: 'library'},
    foreign_key: :user_id,
    class_name: 'CollectionBook'
...