0

我的数据库中有 3 个表

  1. 用户(id、用户名、电子邮件、密码等...)
  2. 生产者(id,user_id)
  3. 地址(名字、城市、addressable_id 等)

生产者与用户表(User.id = Producer.user_id)和地址表(p.id = Address.addressable_id)有链接

现在我想用他的用户名获取所有生产者地址

我正在尝试以下查询,但它没有给出预期的输出

select u.login, p.id, a.city from producers p

join users u on u.id = p.user_id

join addresses a on a.addressable_id = p.id

我的模型和关系

用户.rb

class User < ActiveRecord::Base
  has_one :customer
  has_one :producer
end

生产者.rb

class Producer < ActiveRecord::Base
  belongs_to :user
  belongs_to :updated_by_user, :class_name => "User", :foreign_key => "updated_by_user_id"

  has_one :address, :as => :addressable
  has_many :items  
end

地址.rb

class Address < ActiveRecord::Base
  belongs_to :addressable, :polymorphic => true

  belongs_to :updated_by_user, :class_name => "User", :foreign_key => "updated_by_user_id"
end
4

2 回答 2

2

您将要使用(docs)的#select方法。ActiveRecord::Relation

导轨 3.X:

Producer.joins(:user, :address).select("users.login, producers.id, addresses.city")

导轨 2.X:

Producer.all(:joins => [:user, :address], :select => "users.login, producers.id, addresses.city")
于 2012-10-31T12:32:09.937 回答
1

您的查询看起来不错。

尝试从“加入”更改为“左加入”,看看结果如何。

select u.login, p.id, a.city from producers p

left join users u on u.id = p.user_id

left join addresses a on a.addressable_id = p.id

其背后的原因是可能缺少其中一个 id,从而删除了整个结果。如果是这种情况,您将能够看到一些具有 NULL 值的列。

于 2012-10-31T12:33:02.810 回答