【发布时间】:2014-03-13 03:24:25
【问题描述】:
一个位置属于一个或多个实体。一个实体可以有一个或多个位置。
我尝试获取与当前位置具有相同实体的所有其他位置。
我有以下型号:
class Location < ActiveRecord::Base
has_many :location_assignments
has_many :entities, :through => :location_assignments
accepts_nested_attributes_for :location_assignments
end
class Entity < ActiveRecord::Base
has_many :location_assignments
has_many :locations, through: :location_assignments
accepts_nested_attributes_for :location_assignments
end
这是我想要的 SQL
SELECT DISTINCT l.* FROM locations l, location_assignments la, entities e
WHERE l.id = la.location_id
AND la.entity_id = e.id
AND e.id in ( SELECT ee.id from entities ee, location_assignments laa
WHERE ee.id = laa.entity_id
AND laa.location_id = 1)
但我不想使用 SQL。 这就是我用 Rails 尝试过的
Location.joins(:entities => :locations).where(:locations => {:id => location.id})
它给了我好几倍的当前位置。行数和 SQL 一样(没有 distinct 只获取当前位置)。
有什么想法吗?
【问题讨论】:
标签: ruby-on-rails join model