我有一个 has_many through
关联如下:
has_many :bookmarks, -> {where('actions.bookmark=true')},
:through => :actions,
:source => :object
我想做的是扩展上面的内容以传递已添加书签的对象的类别。类似于以下内容:
has_many :bookmarks, -> (category) {where('actions.bookmark=true and objects.category=?', category)},
:through => :actions,
:source => :object
我希望它能让我进行诸如 user.bookmarks("papers")
之类的查询.但是,当我尝试以上操作时,category
取值 #<User:0x000001017f2090>
(基本上是上面调用中的 user
)而且我似乎无法用简单的字符串调用关联。
关于如何实现这一点有什么建议吗?非常感谢。
最佳答案
我不认为这可以在 has_many
调用中实现。我只是在我的 User
类中定义一个实例方法来获得该功能:
def bookmarks_for_category(category)
bookmarks.includes(:objects).where('objects.category = ?', category)
end
不确定这个方法的实现,但关键是我不认为你可以有一个接受参数的has_many
。
您可以查看的另一件事是 scopes .在这种情况下,您可能希望在 Bookmark
模型上定义一个 for_category
范围,允许类似以下内容:
user.bookmarks.for_category('papers')
关于ruby-on-rails - Rails4 has_many 通过带参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25173236/