我正在尝试关联两个满足特定条件的表。
这是一种“用户的书本中有书”的模式。该收藏集可以是图书馆或愿望清单。
有一个users表(非常标准),一个books表(与细节无关)和一个名为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' }
,它确实起作用。但是无论图书馆还是收藏清单,我都需要这种关联。
答案 0 :(得分:1)
lambda -> { ... }
必须是第一个参数(或第二个参数,具体取决于您的计算方式)
has_many :library_collection_books,
-> { where collection_type: 'library'},
foreign_key: :user_id,
class_name: 'CollectionBook'