1

私はRuby on Rails 3.0.7を使用していますが、has_many : through動的条件を設定したいと思います。`has_many:through`レコードアソシエーションの動的条件

私は私のモデルファイルで

:私も関係を作成したユーザーのidを表しcreated_by_user_id列を(他の列はarticle_idcategory_idある)持って、関連Article::Categories::ArticleRelationshipデータベーステーブルで

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_category_relationshipsにフィルタリングしたいユーザーの動的条件を渡すことでid値を渡します。そうでない場合、idの値を渡さないと、デフォルト値は@article.article_categoriesコードを使用してすべての記事カテゴリを取得できるようにする必要があります。

可能でしょうか?もしそうなら、レコード協会のステートメントでそれをどのようにコード化できますか?

答えて

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)を呼び出すことができます。

+0

'article_category_relationships'テーブル名をモデルファイルに直接入力するのは一般的な方法ですか? – Backo

+0

申し訳ありませんが、あなたが何を意味するのか分かりませんか?あなたは説明できますか? – polarblau

+0

私は、データベーステーブルの名前をクラス\モデルコードの中に直接置くことは何度も見てきました(私にとっては、初心者です。それは一般的な慣行ですか?つまり、そのアプローチは一般的に使用されていますか? – Backo

関連する問題