class State < ActiveRecord::Base
has_many :cities
end
class City < ActiveRecord::Base
belongs_to :state
has_many :companies
end
class Company < ActiveRecord::Base
belongs_to :city
end
我正在尝试列出至少包含一家注册公司的所有州及其各自的城市。我的第一次尝试是以下查询:
states = State.joins(:cities => :companies).includes(:cities)
哪个有效,但如果一个州有多个城市中有公司,我最终会得到重复。然后我将查询更改为:
states = State.joins(:cities => :companies).includes(:cities).select("distinct(states.id)")
此查询几乎可以正常运行。我可以访问城市(states [0] .cities),并且没有重复项,但如果我尝试从State对象访问属性,则会收到以下错误:
ruby-1.9.2-p290 :056 >states[0].name
ActiveModel::MissingAttributeError: missing attribute: name
我该如何解决这个问题?
提前致谢
答案 0 :(得分:2)
您的select语句会覆盖默认值(SELECT * FROM ...
变为SELECT distinct(state.id) FROM...
),因此结果不包括州表的列(从中推断出属性)。尝试将您的select方法更改为以下内容:
.select("distinct(states.id), states.*")