0

Active Record Relationオブジェクトを段階的に構築し、ユーザーが車のメーカーとモデルで車の部品のリストをフィルタリングできるようにします。

parts = Part.where(:listed => (start_date..end_date))

unless filters[:make_id].nil? || filters[:make_id] == 0    
  parts = parts.joins(:car).
      where("cars.make_id = ?", filters[:make_id] ) 
end

unless filters[:model_id].nil? || filters[:model_id] == 0      
  parts = parts.joins(:car).
      where("cars.model_id = ?", filters[:model_id] ) 
end

etc...

これは繰り返しですが、これを「make_id」と「model_id」をパラメーターとして受け取るメソッドに引き出したいと思います。保持する重要な機能の1つは、フィルターがnilの場合(たとえば、ユーザーがモデルを指定しない場合)、すべてのモデルのパーツが返されることです。

私はこれに取り組む方法を理解することができず、Googleに何をすべきかわかりません。手伝ってくれますか?

4

1 に答える 1

1
parts = Part.where(:listed => (start_date..end_date))

[:make_id, :model_id].each do |k|
  filters[k]
  .tap{|f| parts = parts.joins(:car).where("cars.#{k} = ?", f) unless f.to_i.zero?}
end
于 2013-01-20T18:16:16.983 に答える