私は特定のユーザのすべての投稿を仲間関係で抽出しようとしています。私はそれが正しいかどうか分からないので、私はよく説明します。ユーザーは、一部のグループに所有権とメンバーシップを持っています。ユーザーは、グループのメンバーまたは所有者のいずれかになることができますが、両方のメンバーになることはできません。すべての投稿はユーザーとグループのIDを持ちます。私は問題が以下の関係に起因すると思う。どのように私はそれを回避することができますか?もう一つ。私はまた、ユーザーのグループに他のユーザーが投稿した投稿をすべて見つけなければなりません。言い換えれば、私はグループを通過する必要があります。Ruby on Rails 3で3つのテーブルに結合する
/-- Owner ---\
User -- -- Group -- Post
| \-- Member --/ |
|_______________________________|
class User < ActiveRecord::Base
has_many :posts, :dependent => :destroy
has_many :ownerships, :foreign_key => "user_id", :dependent => :destroy
has_many :memberships, :foreign_key => "user_id", :dependent => :destroy
# Problem with these two? I think so.
has_many :groups, :through => :memberships, :source => :user
has_many :groups, :through => :ownerships, :source => :user
class Ownership < ActiveRecord::Base
belongs_to :users, :class_name => "User"
belongs_to :groups, :class_name => "Group"
has_many :posts, :through => :groups, :source => :posts
class Membership < ActiveRecord::Base
belongs_to :users, :class_name => "User"
belongs_to :groups, :class_name => "Group"
has_many :posts, :through => :groups, :source => :posts
class Group < ActiveRecord::Base
has_many :posts, :dependent => :destroy
class Post < ActiveRecord::Base
belongs_to :user
belongs_to :groups
誤差がラインから来ている:
_groups = user.groups
誤差を以下のように:モデルの所有権のユーザー:
ソース・アソシエーション(単数または複数)を見つけることができませんでした。 'has_many:groups、:through =>:ownerships、:source =>'を試してください。それはユーザー、グループ、または投稿のいずれかですか?
私はまだ問題を理解していません。期待どおりにあなたにとってうまくいかないのは何ですか? – mkro
@mkro申し訳ありませんが、私はちょうど最後に追加した部分を逃しました。私はまた、メンバーシップとオーナーシップによって、ユーザーに属するグループからすべての投稿を収集する必要があります。 –
@mkro私はより具体的です:これは私にエラーを与えるでしょう - _groups = user.groups モデルの所有権のソースの関連付けを見つけることができませんでした。 'has_many:groups、:through =>:ownerships、:source =>'を試してください。それはユーザー、グループ、または投稿のいずれかですか? –