【发布时间】:2012-10-31 12:25:25
【问题描述】:
我的数据库中有 3 个表
- 用户(ID、用户名、电子邮件、密码等)
- 生产者(id、user_id)
- 地址(名字、城市、addressable_id 等)
Producer 与用户表(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
【问题讨论】:
-
您能否包含
addresses表结构的其余部分?您当前正在将addressable_id加入到producers唯一id- 您可能应该将addresses表上的producer_id字段加入producers唯一id。 -
@MarkBannister 不,我没有在地址表中添加 producer_id 字段,addressable_id 等于 producer_id
-
我不是说你应该添加一个 producer_id 字段,我是说我认为可能有一个已经存在 - 请重新阅读我的内容写道。如果它们具有相同的密钥,那么拥有单独的生产者和地址表似乎有点毫无意义 - 请记住,“密钥,整个密钥,只有密钥”。
-
@MarkBannister 嘿对不起我的解释不好,为什么我在不同的表中添加地址是我有不同类型的用户,比如生产者,我有客户、员工等,每个用户有自己的地址
标签: sql ruby-on-rails database ruby-on-rails-2