Ruby on rails Rails-保存模型时有无引发错误

Ruby on rails Rails-保存模型时有无引发错误,ruby-on-rails,ruby,Ruby On Rails,Ruby,Im写入方法,其中用户将布尔值设置为在记录上运行保存,无论是否引发错误 Record.all.each do |record| if raise_bool.true? # save the record with raise error else # save the record no raise error end end 但我不确定如何实现,任何帮助都将不胜感激。您可以使用“保存”来引发错误!或者,可以使用“保存”将错误作为布尔值返回 通常,您总是希望使用sa

Im写入方法,其中用户将布尔值设置为在记录上运行保存,无论是否引发错误

Record.all.each do |record|
  if raise_bool.true?
    # save the record with raise error
  else
    # save the record no raise error
  end
end
但我不确定如何实现,任何帮助都将不胜感激。

您可以使用“保存”来引发错误!或者,可以使用“保存”将错误作为布尔值返回

通常,您总是希望使用save!如果您认为您不想使用save!你可能应该重新考虑你在做什么。消除代码中的错误,特别是与数据直接相关的错误,总是会导致应用程序出现问题

代码中还存在一个问题,即在记录的每次迭代中计算布尔值。您可以使用procs做一件很酷的事情,以确定在迭代之外调用什么:

method_save = raise_bool == true? ? proc { |x| x.save! } : proc { |x| x.save }
然后在循环内部:

method_save.call(record)

这并不能完全回答您的问题,但让我建议一种与Rails方式更一致的类似方法。验证失败时可能会引发错误。因此,考虑验证条件:

类MyModel<应用程序记录 属性访问器:用户拒绝验证 验证:name,presence:true,除非:user\u拒绝\u验证? 终止 那你就可以了

MyModel.newuser\u拒绝\u验证?:false,名称:nil MyModel.newuser\u拒绝\u验证?:true,名称:“Norm”
你真的是指引发错误还是跳过验证。如果保存验证失败,则不会进行插入/更新,但不会引发错误。我假设您正在寻找前者,它允许用户真正保存一条其他方面无效的记录。