1

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. idAS t0_r0, mygroupusers. mygroup_idAS t0_r1, mygroupusers. user_idAS t0_r2, mygroupusers. user_nameAS t0_r3, mygroupusers. created_atAS t0_r4, mygroupusers. updated_atAS t0_r5, mygroupbuildings. idAS t1_r0, mygroupbuildings. mygroup_idAS t1_r1, mygroupbuildings. coursewalk_idAS t1_r2, mygroupbuildings. created_atAS t1_r3, mygroupbuildings. updated_atAS t1_r4 FROM mygroupusers LEFT OUTER JOIN mygroupsON ( mygroupusers. id= mygroups. mygroup_id) LEFT OUTER JOIN mygroupbuildingsON ( mygroupbuildings. mygroup_id= mygroups. id) WHERE (mygroupbuildings.building_id = '2' AND mygroupusers.user_id = '55') ):

ありがとう、

ニック、

4

1 に答える 1

0

これは、照会された user_id と building_id を含むグループを返すように照会をセットアップする必要がある方法です。

Mygroup.find(:all,
             :include => [:mygroupbuildings, :mygroupusers],
             :conditions => ["mygroupbuildings.building_id = #{building.id} AND mygroupusers.user_id = #{current_user.user_id}"])      
于 2012-10-01T23:20:44.077 に答える