17a*_*ing 2 ruby ruby-on-rails
我有以下show动作:
def show
@name = params[:id]
rescue ActiveRecord::RecordNotFound
redirect_to :action => 'index'
@rpm = FedoraRpm.find_by_name(@name, :include => :rpm_comments)
@page_title = @rpm.name
end
Run Code Online (Sandbox Code Playgroud)
即使我在那里添加了一个救援声明,它似乎也不起作用,当我尝试查看不存在的URL时,我收到此错误:
undefined method 'name' for nil:NilClass
我知道这可能与@page_title变量有关,但我该如何解决这个问题呢?
@rpm = FedoraRpm.find_by_name(@name, :include => :rpm_comments)
Run Code Online (Sandbox Code Playgroud)
如果无法找到结果,则返回nil.这可能是你的情况.然后,您尝试name在nil对象上调用.
如果您希望查询返回nil值,请确保相应地更改代码.
救援声明在那里没有任何意义.如果您想在使用时丢失记录时重定向
def show
@name = params[:id]
@rpm = FedoraRpm.find_by_name!(@name, :include => :rpm_comments)
@page_title = @rpm.name
rescue ActiveRecord::RecordNotFound
redirect_to :action => 'index'
end
Run Code Online (Sandbox Code Playgroud)
注意我使用了找到的爆炸版本.
@rpm = FedoraRpm.find_by_name!(@name, :include => :rpm_comments)
Run Code Online (Sandbox Code Playgroud)