我有一个单身资源,需要#show上的外键。因此,我需要使用http://example.com/product/dash?uid=abcd
这样的网址来访问它,其中uid abcd
属于外部资源。
以下是我对班级的看法:
class SingletonController < ApplicationController
# this method requires a valid uid param
def show
params.require(:uid)
@user = User.find_by :id => params[:uid]
end
end
我试图找到一个使用Action Controller中的params.require的示例,但是我发现的唯一示例验证了更新时的param值,类似@user.update_attributes!(user_attributes)
,其中user_attributes是一个调用params的方法.require并验证用户对象实际存在。我无法用show
方法找出一个好方法。
Rails 4.0中检查外来对象存在的最佳方法是什么,如果不存在则抛出异常?
答案 0 :(得分:1)
来自http://apidock.com/rails/ActiveRecord/Base
可以在动态查找器的末尾添加一个感叹号(!),以便在它们不返回任何记录时引发ActiveRecord :: RecordNotFound错误,例如Person.find_by_last_name!。
所以试试
User.find_by_key! params[:key]
让它抛出异常。另请参阅the official API docs和the Active Record Query Interface Guide。
编辑:
请注意,在普通的Ruby中,爆炸意味着该方法与其非爆炸性对应物相比是“危险的”。通常(但不总是)这意味着该方法改变其接收器。像Rails这样的框架可能有自己的约定(如本答案中所述)。如有疑问,请查看文档。 :)