我想将变量设置为给定值,但前提是该值有效。
现在这是我的代码:
if Something.find(params[:id].comments.first.exists?
@comment = Something.find(params[:id]).comments.first
else
@comment = nil
end
但这是低效的,因为它必须加载两次记录。
我尝试使用ruby方法try
来确保只有在值有效时才设置变量:
@comment = Something.try.find(params[:id]).comments.first
但无论我把它放在哪里,我都会回来“nil is not symbol”错误。似乎try
仅用于打印变量。
任何人都知道我只用一个查询就可以完成这个任务吗?
答案 0 :(得分:1)
你可以尝试:
@comment = Comment.find_by(something_id: params[:id])
答案 1 :(得分:0)
你有没有尝试过?
if @comment = Something.find(params[:id]).comments.first
# do something with your @comment variable
else
# do something else
end
答案 2 :(得分:0)
# Attempt your query
@comment = Something.find(params[:id]).comments.first
# If the record does not exist, use rescue to handle the exception gracefully
rescue ActiveRecord::RecordNotFound
# Handle the exception
@comment = nil
end
您可以找到有关例外和异常处理的更多信息here。
答案 3 :(得分:0)
我认为这就是你想要的:
@comment = Something.find_by(id: params[:id]).try(:comments).try(:first)
在这种情况下,find_by
将返回Something对象或nil。在nil的情况下,尝试链仍将返回nil,并且,如果是object,则会执行尝试中的方法并为您提供第一个注释(如果存在)(注意!如果对象存在,您可能仍然会得到一个nil,因为该对象可能没有任何评论。)
因此,只有当Something对象存在并且有注释时,才会设置@comment
;否则,它将是零。