Rails 2.3 を使用しており、建物へのユーザー権限を管理する 3 つのテーブルがあります。mygroups テーブルは、ユーザーと建物が属するグループのリストです。mygroupsbuildings は、建物とそれに関連付けられたグループのリストです。mygroupsusers は、関連付けられたグループを持つユーザーのリストです。
create_table "mygroups", :force => true do |t|
t.string "name"
t.integer "user_id"
t.string "user_name"
t.integer "permissions"
end
create_table "mygroupbuildings", :force => true do |t|
t.integer "mygroup_id"
t.integer "building_id"
end
create_table "mygroupusers", :force => true do |t|
t.integer "mygroup_id"
t.integer "user_id"
t.string "user_name"
end
特定の user_id が特定の building_id と同じグループのメンバーであるかどうかを調べるクエリを作成したいと考えています。
次の関連付けをセットアップしました。
class Mygroup < ActiveRecord::Base
has_many :mygroupusers
has_many :mygroupbuildings
end
class Mygroubuilding < ActiveRecord::Base
belongs_to :mygroup
has_many :mygroupusers, :through => :mygroup
end
class Mygroupuser < ActiveRecord::Base
belongs_to :mygroup
has_many :mygroupbuildings, :through => :mygroup
end
次のクエリを書きました。
Mygroupuser.find(:all,
:include => :mygroupbuildings,
:select => "mygroupbuildings.building_id, mygroupusers.user_id",
:conditions => ["mygroupbuildings.building_id = '#{building.id}' AND mygroupusers.user_id = '#{current_user.user_id}'"])
これにより、次のエラーが表示されます。
ActiveRecord::StatementInvalid (Mysql::Error: 'on 節' の不明な列 'mygroups.mygroup_id': SELECT mygroupusers
. id
AS t0_r0, mygroupusers
. mygroup_id
AS t0_r1, mygroupusers
. user_id
AS t0_r2, mygroupusers
. user_name
AS t0_r3, mygroupusers
. created_at
AS t0_r4, mygroupusers
. updated_at
AS t0_r5, mygroupbuildings
. id
AS t1_r0, mygroupbuildings
. mygroup_id
AS t1_r1, mygroupbuildings
. coursewalk_id
AS t1_r2, mygroupbuildings
. created_at
AS t1_r3, mygroupbuildings
. updated_at
AS t1_r4 FROM mygroupusers
LEFT OUTER JOIN mygroups
ON ( mygroupusers
. id
= mygroups
. mygroup_id
) LEFT OUTER JOIN mygroupbuildings
ON ( mygroupbuildings
. mygroup_id
= mygroups
. id
) WHERE (mygroupbuildings.building_id = '2' AND mygroupusers.user_id = '55') ):
ありがとう、
ニック、