2016-06-27 12 views
0

私はActiveRecordの呼び出しからこれを取得:Rails - ActiveRecordオブジェクトから特定のレコードのみをフェッチする方法は?

#<ActiveRecord::Associations::CollectionProxy [ 
    #<CarService id: nil, car_id: nil, car_service: 1, 
       created_at: nil, updated_at: nil, car_type: 0>, 
    #<CarService id: nil, car_id: nil, car_service: 11, 
       created_at: nil, updated_at: nil, car_type: 1>]> 

私はこれを取得したら、私はcar_type = "0"レコードのみをフィルタリングする必要があります。別のデータベースコール(WHERE car_type = "0")を実行せずにこれを行う方法は?

ありがとうございます。

EDIT:

この:

car.car_services.select{|key, hash| hash['car_type'] == "1" } 

は動作しません。

+0

'car.car_services.select {| car_service | car_service.car_type.to_s == "1"} '。ところで、これは_ワング_アプローチです。 DBに対するもう1つのフィルタリングクエリは、より高速で信頼性が高くなります。 – mudasobwa

+0

試しました: 'car.car_services.select {| car_service | car_service.car_type == 1} '? – oliviergg

+0

なぜ「どこ?結果が大きければ、 'select'は長い時間がかかります。クエリが完全に – lusketeer

答えて

0

ちょうどその配列にあなたの結果を変換するあなたはCarServiceモデルにスコープを使用することができ、この

result = car.car_services.to_a.select do |e| 
    e.car_type == "0" 
end 
+0

ActiveRecord :: Associations :: CollectionProxyを呼び出すと、実際にコレクションが配列に変換されます。 http://edgeapi.rubyonrails.org/classes/ActiveRecord/Associations/CollectionProxy.html#method-i-select – jaydel

0

のようにそれをフィルタリング:

scope :type_ones, -> { where(car_type: 1) } 

、あなたはこのようにそれを使用することができます:

car.car_services.type_ones 

あなたが列挙型を使用している場合、それは良くなります。列挙型はあなたの代わりに自動的にスコープを作成するためです。もちろん、それはより多くの機能を持っています。 enumの詳細

関連する問題