我有一个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
)并且我似乎无法使用简单的字符串。
有关如何实现这一目标的任何建议?非常感谢。
答案 0 :(得分:1)
我认为这不能在has_many
电话中实现。我只是在我的User
类中定义一个实例方法来获得该功能:
def bookmarks_for_category(category)
bookmarks.includes(:objects).where('objects.category = ?', category)
end
不确定此方法的实施方式,但重点是我不认为您可以使用has_many
接受参数。
您可以研究的另一件事是scopes。在这种情况下,您可能需要在for_category
模型上定义Bookmark
范围,允许以下内容:
user.bookmarks.for_category('papers')