我正在使用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_id
和category_id
),代表用户的id
谁创造了这种关系。
因此,为了检索与用户相关的文章类别,在上面的记录关联代码中,我想通过传递依赖于该用户:article_category_relationships
值的动态条件来过滤id
。否则,如果我没有传递id
值,则默认值应允许使用@article.article_categories
代码检索所有文章类别。
有可能吗?如果是这样,我如何在Record Association语句中对其进行编码?
答案 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)
。