0

各車にメーカーがあり、複数のスタイルを持つことができるデータベースから車を取得しようとしています。

たとえば、フォードフィエスタはクーペ、セダン、ハッチです。

モデルに関係を設定しましたが、結果を返すクエリを作成したいと思います。クエリの構成は、提供されるパラメーターによって異なります。

これは私がこれまでに持っているものです

条件={}
params [:manufacturer_id] .blank?を除いて、conditions [:manufacturer_id] = params [:manufacturer_id]?#これはうまくいきます!
条件[:style_id] = "style_id IN(?)"、params [:style_ids] .blank?#これはそれを壊します:(

車=Car.find(:all、:conditions =>条件)
return render:json=>車

返されるエラー PG::Error: ERROR: column cars.style_ids does not exitはもちろん、style_idがと呼ばれる結合テーブルにあるためcars_stylesです。条件内で検索するテーブルをActiveRecordに指示する方法はありますか?

ここで重要なのは、存在するパラメータを取得して適切なクエリを作成するコントローラメソッドを1つだけにしたいということです。したがって、manufacturer_idがない場合は、スタイルのみを照会します。その逆の場合も同様です。もちろん、後で他のパラメータも追加します。

4

1 に答える 1

0

私はこのようなスコープクエリでこれを行うことになりました

スコープ:from_manufacturer、lambda {| manu | {:joins =>:manufacturer、:conditions => "manufacturers.id =#{manu}"}}
    scope:from_style、lambda {| style | {:joins =>:style、:conditions => "styles.id =#{style}"}}
    def self.get_cars(params)
        スコープ=自己
        [:manufacturer、:style] .each do | s |

            scope = scope.send( "from _#{s}"、params [s])if params [s] .present?

         終わり
        範囲
    終わり

よく働く!

于 2012-12-13T06:10:40.470 に答える