当没有logging时用()find()
在我目前的rails程序中,当我使用类似的东西
user = User.find(10) 当没有ID = 10的用户时,我将会有如下exception:
 ActiveRecord::RecordNotFound: Couldn't find User with ID=10 
我可以得到零,而不是提出exception,所以当我做这样的事情:
 unless user = Challenge.find(10) puts "some error msg" end 
我只想在没有logging的情况下得到零,我不想使用开始/救援
谢谢
是的,只要:
 Challenge.find_by_id(10) 
对于Rails 4和5:
 Challenge.find_by(id: 10) 
 在Rails 4中,dynamic查找器(例如在接受的答案中使用的find_by_id已被弃用。 
向前走,你应该使用新的语法:
 Challenge.find_by id: 10 
你可以做这个有点hackish,只需使用ActiveRecord查询接口。
这将返回零,而不是引发一个exception
  User.where(:id => 10).first 
你为什么不简单地赶上例外? 你的情况看起来像是例外情况:
 begin user = User.find(10) rescue ActiveRecord::RecordNotFound puts "some error msg" end 
如果你想从救援块中的错误中恢复(例如通过设置一个占位符用户(空模式)),你可以在这个块的下面继续你的代码。 否则,你可能会把所有的代码放在“开始”和“救援”之间的块中。
 你可以试试这个Challenge.exists?(10) 
就像这样简单:
 user = User.find(10) rescue nil 
 对于那些与mongoid挣扎的人来说 ,事实certificate, find和find_by方法都会引发exception – 无论你的rails版本如何! 
 有一个选项 (即raise_not_found_error )可以设置为false,但是当falsey使得find方法不会引发exception。 
因此,对于mongoid用户的解决scheme是令人厌恶的代码:
 User.where(id: 'your_id').first # argghhh 
你可以使用find_by与必要的属性(在你的情况下的id),这将返回零,而不是给出错误,如果没有find给定的ID。
 user = Challenge.find_by_id(id_value) 
或者你可以使用新的格式:
 user = Challenge.find_by id: id_value 
你也可以使用where,但是你必须知道在哪里返回一个活动的logging关系,有零个或多个logging,你需要先使用返回一个logging,否则返回零。
 user = Challenge.where(id: id_value).first 
- Rails 3,has_one / has_many和lambda条件
- validates_uniqueness_of传递nil或空白(没有allow_nil和allow_blank)
- Rails Active Record find(:all,:order =>)问题
- 为什么在ruby / rails / activerecord中总是不需要自己?
- 你如何在Rails 3中使用ActiveRecord关联?
- Rails如何跟踪为数据库运行哪些迁移?
- 如何在Ruby On Rails中使用NuoDB手动执行SQL命令
- ActiveRecord的Rails 3范围与类的方法
- 我如何使用活动logging的轨道中的两个不同的数据库?