2011-09-14 3 views
4
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 

少なくとも1つの会社が登録されているすべての州とそれぞれの都市をリスト表示しようとしています。私の最初の試みは、次のクエリた:Rails 3.1 distinct属性の検索と欠落

states = State.joins(:cities => :companies).includes(:cities) 

動作しますが、私は状態がそれで企業と複数の都市を持っている場合は、重複を取得してしまいます。クエリを次のように変更しました。

states = State.joins(:cities => :companies).includes(:cities).select("distinct(states.id)") 

このクエリはほとんど動作します。私は都市(状態[0] .cities)へのアクセス権を持って、そして何の重複はありませんが、私はStateオブジェクトから属性にアクセスしようとすると、私は次のエラーを取得する:

ruby-1.9.2-p290 :056 >states[0].name 
ActiveModel::MissingAttributeError: missing attribute: name 

どのようにすることができますこれを解決する?事前

答えて

2

おかげで、SELECT文では、デフォルトを上書きします(SELECT * FROM ...SELECT distinct(state.id) FROM...になります)ので、結果は(属性がから推測される)あなたの状態テーブルの列が含まれていません。選択方法を次のように変更してみてください。

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

パーフェクト。それがそれを解決しました。どうもありがとう。 –

+0

[SOLVED]タグは必要ありません。この答えをチェックするだけです; – Robin

+0

Ops、悪いです。 F.A.Q.を読んでください。最初に質問をすると、ちょうどそれはこの^^の指示があることに気づいた。 –

関連する問題