这样的检查会在创建的对象上正确吗?

时间:2014-05-14 10:13:18

标签: ruby-on-rails ruby-on-rails-4

这样的检查会在创建的对象上正确吗?

我觉得这不是真的正确。

  unless DailyTip.find_by_slug(tip[:slug]).persisted?
    daily_tip = DailyTip.create!(
      tip: tip[:tip],
      ...
    )

    day = ProgramDay.find_by_day(tip[:program_day])
    day.update_attributes(daily_tip_id: daily_tip.id)
  else
    puts 'Video tip already created.'
  end

1 个答案:

答案 0 :(得分:0)

这一行

DailyTip.find_by_slug(tip[:slug]).persisted?

没有多大意义,因为find_by_slug将查询数据库,如果找到了某些内容,它将检查它是否已保存到数据库中。如果找不到任何内容,您的代码将会破坏:

 undefined method `persisted?' for nil:NilClass

我认为你打算写这样的东西:;

if DailyTip.find_by(slug: tip[:slug])
  puts "Video tip already created"
else
  daily_tip = DailyTip.create! tip: tip[:tip]
  day = ProgramDay.find_by_day(tip[:program_day])
  day.update_attributes(daily_tip_id: daily_tip.id)
end

最后,很大程度上取决于您的应用逻辑。我希望这有点帮助。