0

データベースに3つのテーブルがあります

  1. ユーザー(ID、ユーザー名、電子メール、pwdなど...)
  2. プロデューサー(id、user_id)
  3. 住所(first_name、city、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

私のモデルと関係

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
4

2 に答える 2

2

docs#select )のメソッドを使用することをお勧めします。ActiveRecord::Relation

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")
于 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の1つが欠落しているため、結果全体が削除されるためです。この場合、NULL値の列がいくつか表示される可能性があります。

于 2012-10-31T12:33:02.810 に答える