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')