0

私は3つの異なるモデルを持っています

class GroupMember < ActiveRecord::Base
attr_accessible :group_id, :user_id, :owner_id
has_one :user
end

class Group < ActiveRecord::Base
attr_accessible :name, :owner, :permission
has_many :groupMembers
end

class User < ActiveRecord::Base
end

そして、groups_controller.rbにいるとき、関連付けを使用して次のクエリを実現したい

SELECT * FROM groups 
LEFT JOIN  group_members ON groups.id = group_members.group_id 
LEFT JOIN users ON group_members.user_id = users.id WHERE users.id = 1

または結合クエリ

Group.joins('LEFT JOIN  group_members ON groups.id = group_members.group_id LEFT JOIN users ON group_members.user_id = users.id').where('users.id = ?', current_user.id );

これは可能ですか?

 Group.joins(:user_id => current_user.id)
4

1 に答える 1

0

可能だと思いますが、これらのテーブルを含むDBがないとすぐにテストするのは少し難しいです。おそらく次のようなものです:

Groups.joins(:group_members, :user).merge(User.where(:id => current_user.id))

しかし、デザインは少し奇妙です。特定のユーザーのすべてのグループをフェッチしたいとします。次のように配置するのが最適です。

@user = User.find_by_id(current_user.id)
@groups = @user.groups

これが機能するgroupsには、ユーザーモデルに関連付けが必要です。

なぜあなたが持っているのかも私にはわかりませんGroupMember has_one :user。グループメンバーは1人のユーザーにのみ関連していることを理解していますが、ユーザーを異なるグループの複数のグループメンバーとして表すことはできますか?はいの場合、Railsの設計方法は次のようになります。

class GroupMember < ActiveRecord::Base
  attr_accessible :group_id, :user_id, :owner_id
  belongs_to :user
  belongs_to :group
end

class Group < ActiveRecord::Base
  attr_accessible :name, :owner, :permission
  has_many :group_members
  has_many :users, :through => :group_members
end

class User < ActiveRecord::Base
  has_many :group_members
  has_many :groups, :through => :group_members
end
于 2012-09-26T10:40:36.500 に答える