2011-04-29 55 views
0

這可能非常簡單,但我仍然很早就開始使用rails,並且似乎無法找出正確的短語來輸入到Google中以查找回答。如何通過Rails3中的關係設置多個has_many,這取決於連接表中的字段

我有過關係,下面描述一個非常簡單的has_many:

用戶
-user_id
-name

文章
- article_id的
- 標題

Article_Relationship
- user_id
- article_id
- relationship_type

關於關係類型,它將是一個字符串或int來表示關係類型,所以類似於favorite,recent_viewed,written_by等。如何設置多個has_many:articles,:through =>:article_relationships,以便通過user.recently_viewed,user.favorite等等來輕鬆訪問特定類型關係的文章?

謝謝你一堆。

回答

2

你是在正確的軌道上,但你只需要利用示波器的:

class Article < ActiveRecord::Base 
    # Here RECENTLY_VIEWED_TYPE refers to the type of relationship, whatever 
    # that constant is defined as. 
    scope :recently_viewed, 
    where('article_relationships.relationship_type=?', RECENTLY_VIEWED_TYPE) 
end 

然後你就可以直接從用戶訪問此:

@user.articles.recently_viewed.all 
0

您可以將:conditions:through選項一起傳遞給has_many。你也可以命名這個協會有些不同。所以,讓你做的是這樣的能力:

class User < ActiveRecord::Base 
    has_many :article_relationships 
    has_many :articles, :through => :article_relationships 

    has_many :recently_viewed_articles, :class_name => 'Article', :through => :article_relationships, :conditions => ['article_relationships.relationship_type = ?', 1] 

    has_many :favorite_articles, :class_name => 'Article', :through => :article_relationships, :conditions => ['article_relationships.relationship_type = ?', 2] 
end 

你可能有傳遞給has_many一點點的選項來打,但你的想法。

+0

這似乎很好地工作!謝謝! 除了has_many選項的其餘部分,我不得不添加:source =>'article',或者它不知道我所指的是什麼,但是一旦完成,就是順利的航行! – Charles 2011-04-29 21:51:58

相關問題