指定外键和选项的Rails关联

时间:2019-07-03 21:27:11

标签: ruby-on-rails associations

我正在尝试关联两个满足特定条件的表。

这是一种“用户的书本中有书”的模式。该收藏集可以是图书馆愿望清单

有一个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' }

,它确实起作用。但是无论图书馆还是收藏清单,我都需要这种关联。

1 个答案:

答案 0 :(得分:1)

lambda -> { ... }必须是第一个参数(或第二个参数,具体取决于您的计算方式)

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