Rails找到了ActiveRecord :: RecordNotFound

Red*_*irt 32 ruby-on-rails

我有一个表格,其中包含模型中的"属于".该表包含用于链接两个表的xx_id字段.

但是,有时xx_id将是空白的.如果是,我得到ActiveRecord :: RecordNotFound.我不想要错误 - 我只想为这个字段显示空白.

你有什么建议?

Gra*_*wan 73

使用该方法时,Rails将始终引发ActiveRecord :: RecordNotFound异常find.find_by_*但是,nil当没有找到记录时,这些方法会返回.

ActiveRecord的文档告诉我们:

RecordNotFound - 没有记录响应find方法.具有给定ID的行不存在或行不符合其他限制.有些查找调用不会引发此异常,表示未发现任何信号,请查看其文档以获取更多详细信息.

如果您想nil在无法找到记录时返回,只需按如下方式处理异常:

begin
  my_record = Record.find params[:id]
rescue ActiveRecord::RecordNotFound => e
  my_record = nil
end
Run Code Online (Sandbox Code Playgroud)

  • 我认为使用`find_by_id`是返回`nil`而不是捕获异常的更好解决方案. (38认同)
  • 动态`find_by`方法容易受到SQL注入攻击,因此请尝试使用答案中建议的find方法.http://blog.phusion.nl/2013/01/03/rails-sql-injection-vulnerability-hold-your-horses-here-are-the-facts/ (3认同)

den*_*icz 7

你不能写

my_record = Record.find(params[:id) rescue nil
Run Code Online (Sandbox Code Playgroud)

  • 这也将丢弃任何不是'ActiveRecord :: RecordNotFound`的错误.如果你想使用救援解决方案而不是`.find_by_id`,那么最好只从特定的预期错误中解救出来. (4认同)
  • 你可以,但你几乎不应该使用'rescue nil',因为它隐藏了所有可能的错误。 (2认同)

小智 5

Record.find_by(id: params[:id])
Run Code Online (Sandbox Code Playgroud)

Record如果找到则返回对象,否则返回nil。