28

Ruby on Railsでこれを達成するためのより良い方法はありますか?

私は11個のフィールドを探していますが、すべてが必要です。見つからない場合は初期化します。

さらに必須フィールドが追加されます。

このクエリは私にとっては完璧に機能しますが、これを行うための最良の方法とは思えません。

find_or_initialize_by_make_and_country_and_engine_and_power_and_body_and_doors_and_fuel_and_cylinders_and_transmission_and_gears_and_wheels(model,country,engine,power,body, doors, fuel, cylinders, transmission,gears,wheels)
4

4 に答える 4

7

使用している膨大な数のフィールドを考慮すると、手動でレコードを見つけて、存在しない場合は初期化する方がよいでしょう。

attributes = {
  country: country,
  engine: engine,
  power: power,
  body: body
  etc ...
}

record = where(attributes).first
record = new(attributes) unless record
于 2012-09-07T17:30:05.050 に答える
-2

使用中find_or_intialize_by

キー フィールドで検索します。一度にすべてのフィールドを割り当てないでください

たとえば、make がモデルのキー フィールドであると仮定します。

car = find_or_initialize_by_make(model)

car.update_attributes(country: country,engine: engine,power: power, body: body,doors: doors ,fuel: fuel,cylinders:cylinders,transmission: transmission, gears: gears, wheels: wheels)

http://api.rubyonrails.org/classes/ActiveRecord/Base.html#label-Dynamic+attribute-based+finders

于 2012-09-07T14:26:53.357 に答える