Rails4 has_many通过参数

我有一个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 ),我似乎无法用简单的字符串调用关联。

有关如何实现这一目标的任何建议? 非常感谢。

我不认为这可以在has_many调用中实现。 我只是在我的User类中定义一个实例方法来获得该function:

 def bookmarks_for_category(category) bookmarks.includes(:objects).where('objects.category = ?', category) end 

不确定这个方法的实现,但重点是我认为你不能有一个接受参数的has_many

您可以研究的另一件事是范围 。 在这种情况下,您可能希望在Bookmark模型上定义for_category范围,允许以下内容:

 user.bookmarks.for_category('papers')