Eqb*_*bal 88 ruby activerecord ruby-on-rails ruby-on-rails-3
在我当前的rails程序中,当我使用类似的东西
user = User.find(10)
Run Code Online (Sandbox Code Playgroud)
当没有ID = 10的用户时,我会有例外:
ActiveRecord::RecordNotFound: Couldn't find User with ID=10
Run Code Online (Sandbox Code Playgroud)
我可以获得nil而不是提出异常,所以当我做以下事情时:
unless user = Challenge.find(10)
puts "some error msg"
end
Run Code Online (Sandbox Code Playgroud)
我只想在没有记录的情况下获得nil并且我不想使用begin/rescue
谢谢
apn*_*ing 157
是的,只是这样做:
Challenge.find_by_id(10)
Run Code Online (Sandbox Code Playgroud)
对于Rails 4和5:
Challenge.find_by(id: 10)
Run Code Online (Sandbox Code Playgroud)
hat*_*a91 30
在Rails 4中,动态查找程序 - 例如find_by_id
在已接受的答案中使用的 - 已被弃用.
继续,您应该使用新语法:
Challenge.find_by id: 10
Run Code Online (Sandbox Code Playgroud)
bea*_*nie 14
你可以这样做有点hackish,只需使用ActiveRecord查询接口.
这将返回nil,而不是引发异常
User.where(:id => 10).first
Run Code Online (Sandbox Code Playgroud)
你为什么不简单地抓住异常?您的案例看起来与以下内容完全相同:
begin
user = User.find(10)
rescue ActiveRecord::RecordNotFound
puts "some error msg"
end
Run Code Online (Sandbox Code Playgroud)
如果要从救援块中的错误中恢复(例如,通过设置占位符用户(空模式)),可以继续使用此块下面的代码.否则,您可能只需将"快乐案例"的所有代码放在"开始"和"救援"之间的块中.
归档时间: |
|
查看次数: |
37915 次 |
最近记录: |