ruby on rails find_or_initialize

joe*_*yar 24 ruby ruby-on-rails ruby-on-rails-3

有没有更好的方法在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)
Run Code Online (Sandbox Code Playgroud)

Fil*_*sti 75

在轨道3.2我会做

attributes = {}
Model.where(attributes).first_or_initialize
Run Code Online (Sandbox Code Playgroud)

文档http://apidock.com/rails/ActiveRecord/Relation/first_or_initialize

  • 这应该是例外答案. (2认同)

mog*_*777 7

考虑到您使用的字段数量,您可能最好手动查找记录并初始化它(如果它不存在):

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

record = where(attributes).first
record = new(attributes) unless record
Run Code Online (Sandbox Code Playgroud)