过滤器model1 has_many model2 has_one model3(多态)怎么样?

时间:2015-02-16 16:33:58

标签: ruby-on-rails rails-activerecord

我的模型用户,然后是

has_many :estates, dependent: :destroy

具有多态关联的遗产

has_one :location, as: :locatable, dependent: :destroy

位置迁移中,我有

class CreateLocations < ActiveRecord::Migration
def change
create_table :locations do |t|
t.string :address
t.decimal :lat, {:precision=>10, :scale=>6}
t.decimal :lng, {:precision=>10, :scale=>6}
t.references :locatable, polymorphic: true, index: true

如何从Location.address过滤或找到用户? 我试过了

User.where(estates: { location: { address: "London" } })

并出现此错误

SQLite3::SQLException: no such column: estates.locatable_id:        
SELECT "users".* FROM "users" WHERE "estates"."locatable_id" = '-   
--
:address: !ruby/object:Arel::Nodes::BindParam {}'

也许像

User.includes(:estates).where

提前感谢!

1 个答案:

答案 0 :(得分:1)

我认为您正在寻找的是使用联接查找用户。

User.joins(estates: :location).where(locations: {address: "London"})

这告诉你的sql调用将用户与庄园和庄园匹配到位置,并仅选择位置为&#34;伦敦&#34;。

的用户。