Rails - 需要控制器参数中的外键

时间:2013-10-11 16:53:53

标签: ruby-on-rails

我有一个单身资源,需要#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中检查外来对象存在的最佳方法是什么,如果不存在则抛出异常?

1 个答案:

答案 0 :(得分:1)

来自http://apidock.com/rails/ActiveRecord/Base

  

可以在动态查找器的末尾添加一个感叹号(!),以便在它们不返回任何记录时引发ActiveRecord :: RecordNotFound错误,例如Person.find_by_last_name!。

所以试试

User.find_by_key! params[:key]

让它抛出异常。另请参阅the official API docsthe Active Record Query Interface Guide

编辑:

请注意,在普通的Ruby中,爆炸意味着该方法与其非爆炸性对应物相比是“危险的”。通常(但不总是)这意味着该方法改变其接收器。像Rails这样的框架可能有自己的约定(如本答案中所述)。如有疑问,请查看文档。 :)