我的数据库中有3个表
制作人与User表(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
user.rb
class User < ActiveRecord::Base
has_one :customer
has_one :producer
end
producer.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
address.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
答案 0 :(得分:2)
您需要使用#select
ActiveRecord::Relation
的{{1}}方法。{/ p>
Rails 3.X:
Producer.joins(:user, :address).select("users.login, producers.id, addresses.city")
Rails 2.X:
Producer.all(:joins => [:user, :address], :select => "users.login, producers.id, addresses.city")
答案 1 :(得分: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值的列。