当没有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的轨道中的两个不同的数据库?