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

我该如何解决这个问题?

提前致谢

最佳答案

您的 select 语句会覆盖默认值( SELECT * FROM ... 变为 SELECT distinct(state.id) FROM... ),因此结果不包括状态表的列(从中推断属性)。尝试将您的选择方法更改为以下内容:

.select("distinct(states.id), states.*")

关于activerecord - Rails 3.1 不同的查找和缺失属性,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/7419577/

10-12 15:23