Rails找到方法挂起

时间:2015-02-12 17:44:19

标签: ruby-on-rails methods find

对rails很新,有点困惑。

我有以下条件:

if Agency.find(params[:agency]).id
  @parent = Agency.find(params[:agency]).id
end

它挂在第一行并返回错误,“无法找到没有ID的代理商” ..这是我的开始......

如果它找不到代理商那么它就不应该做任何事情(至少这是我的意图)。否则设置@parent实例。

检查是否可以找到它(代理商)的正确语法是什么?

修改

搜索文档我意识到了这一点,

“除非找到所有提供的主键的匹配记录,否则find方法将引发ActiveRecord :: RecordNotFound异常。”

3 个答案:

答案 0 :(得分:1)

如果您只想在代理商记录存在时设置@parent变量,请先使用exists?

检查其存在
if Agency.exists?(params[:agency])
  @parent = Agency.find(params[:agency]).id
end

答案 1 :(得分:0)

为了澄清,find方法需要id作为参数。如果您在代理商模型中有一个名为agency的列,则可以使用find_by,例如。 Agency.find_by(agency: params[:agency]).id

答案 2 :(得分:0)

感谢文档和@aruprakshit,我意识到为什么我没有正确地检查这一点。

docs state,"除非找到所有提供的主键的匹配记录,否则find方法将引发ActiveRecord :: RecordNotFound异常。" {{3 }}

我没有按照建议查看params[:agency]是否真的存在。将我的代码调整为以下内容后:

if Agency.exists?(params[:agency])
  @parent = Agency.find(params[:agency]).id
end

它就像一个魅力。