“has_many:through”记录关联的动态条件

时间:2011-07-08 08:37:58

标签: ruby-on-rails ruby ruby-on-rails-3 activerecord associations

我正在使用Ruby on Rails 3.0.7,我想设置一个has_many : through动态条件。

在我的模型文件中,我有:

class Article < ActiveRecord::Base
  has_many :article_category_relationships,
    :class_name  => 'Article::Categories::ArticleRelationship',
    :foreign_key => 'article_id',
    :autosave    => true,
    :dependent   => :destroy
    # Here should be the dynamic condition statement (read below for more 
    # information about this)

  has_many :article_categories,
    :through     => :article_category_relationships,
    :source      => :article_category,
    :dependent   => :destroy
end

在相关的Article::Categories::ArticleRelationship数据库表格中,我还有created_by_user_id列(其他列为article_idcategory_id),代表用户的id谁创造了这种关系。

因此,为了检索与用户相关的文章类别,在上面的记录关联代码中,我想通过传递依赖于该用户:article_category_relationships值的动态条件来过滤id。否则,如果我没有传递id值,则默认值应允许使用@article.article_categories代码检索所有文章类别。

有可能吗?如果是这样,我如何在Record Association语句中对其进行编码?

1 个答案:

答案 0 :(得分:0)

我相信你的类别模型中的范围可能就是你想要的 - 就像这样:

scope :by_user, lambda {|user|
    unless user.nil?
        where('article_category_relationships.created_by_user_id IS ?', user.id).
        join(:article_category_relationships)
    end
}

这允许您拨打@article.article_categories.by_user(@user)