2010-11-30 17 views
0

私は3つのクラスを持っています。ユーザー、フィード、およびエントリ。ユーザーは、1つまたは複数のフィードを持っており、フィードは、1つまたは複数のエントリがあります:ユーザーとフィードクラスは第三テーブルを介して関連している関係テーブルを使ってRailsにテーブルを結合する

class Feed < ActiveRecord::Base 
    has_many :entries 
    has_many :feeds_users 
    has_many :users, :through => :feeds_users, :class_name => "User" 
end 

Class User < ActiveRecord::Base 
    has_many :feeds_users 
    has_many :feeds, :through => :feeds_users, :class_name => "Feed" 
end 

class Entry < ActiveRecord:Base 
    belongs_to :feed 
end 

:今

class FeedsUser < ActiveRecord::Base 
    belongs_to :user 
    belongs_to :feed 
end 

を、私の問題は、私が取得する必要があるということです特定のユーザのフィードおよび各フィードの最新のn個のエントリを含む。 - 存在しない

u = User.first 
Feed.joins(:entries, :users).where(:entries => { :created_at => (Time.now-2.days)..Time.now }, :users => u) 

ここに私の問題は、これがテーブル「フィード」の「ユーザー」を照会しようと、いくつかのSQLを生成していることである:私はこのような何かをいじっています。

特定のユーザーに対してすべてのフィードと最新の10のエントリを与える正しいクエリを作成するにはどうすればよいですか?

答えて

1

テイクアウトhas_many :feeds_users:feeds_usersはモデルであってはいけません。

テーブルを保持する必要がありますが、いくつかのRailsの魔法は舞台裏で行われます。 feedという名前のテーブルとusersという名前のテーブルがある場合、Railsは別の方法を指定しない限り、ルックアップのテーブル名を導出します。ご例えば

Class Feed < ActiveRecord::Base 
    has_many :users 
end 

Class User < ActiveRecord::Base 
    has_many :feeds 
end 

それはusers_feedsテーブル内の関係を探します。それがこのように見える場合は、user_feedsテーブルの関係を探します:

Class Feed < ActiveRecord::Base 
    belongs_to :user 
end 

Class User < ActiveRecord::Base 
    has_many :feeds 
end 

第1の例では多くのユーザーにフィードがあり、2番目の例では1人のユーザーに多くのフィードが割り当てられるため、言語的には正しいです。それはあなたの関係論理が正しいかどうかの良い指標でもあります。

has_manyの代わりにhas_and_belongs_to_manyの関係が必要なように聞こえます。

モデルアソシエーションのすべての形式での完全な停止については、the guideを参照してください。

+0

データベース内のモデルやテーブルだけを削除することをお勧めしますか?それから多対多の関係をどうやって維持するのですか? – fiskeben

+0

もっと簡潔になるように更新しました。 –

+0

ありがとう、has_and_belongs_to_manyは正常に動作します(つまり、それぞれ 'feeds 'と' users'と呼ぶことができます)が、私のjoin/whereコマンドは引き続き同じエラーを発生させます: "feed"テーブルの "user" – fiskeben

関連する問題