Rails4 has_many通过参数

时间:2014-08-07 02:25:13

标签: ruby-on-rails activerecord associations 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:0x000001017f2090>(基本上是user)并且我似乎无法使用简单的字符串。

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

1 个答案:

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