【问题标题】:Rails has_many & through queryRails has_many & 通过查询
【发布时间】:2018-05-15 04:48:34
【问题描述】:

我使用的是 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: Unknown column 'mygroups.mygroup_id' in 'on clause': 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 (@987654348 @.id = mygroups.mygroup_id) 左外连接 mygroupbuildings ON (mygroupbuildings.mygroup_id = mygroups.id) 在哪里(mygroupbuildings.building_id = '2' AND user_id = '55') ):

谢谢,

尼克,

【问题讨论】:

    标签: ruby-on-rails has-many-through


    【解决方案1】:

    这是需要设置查询以返回包含查询的 user_id 和 building_id 的组的方式:

    Mygroup.find(:all,
                 :include => [:mygroupbuildings, :mygroupusers],
                 :conditions => ["mygroupbuildings.building_id = #{building.id} AND mygroupusers.user_id = #{current_user.user_id}"])      
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多