1

我有一个在#show 上需要外键的单例资源。因此,我需要使用http://example.com/product/dash?uid=abcduidabcd属于外部资源的 URL 来访问它。

这是我的课程:

class SingletonController < ApplicationController
  # this method requires a valid uid param
  def show
    params.require(:uid)
    @user = User.find_by :id => params[:uid]
  end
end

我试图从动作控制器中找到一个使用 params.require 的示例,但我发现的唯一示例验证了更新时的参数值,例如@user.update_attributes!(user_attributes)user_attributes 是一个调用 params.require 并验证用户对象的方法实际存在。我想不出一个好的方法来做到这一点show

Rails 4.0 中检查外来对象是否存在并在不存在时抛出异常的最佳方法是什么?

4

1 回答 1

1

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

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

所以试试

User.find_by_key! params[:key]

让它抛出异常。另请参阅官方 API 文档Active Record 查询接口指南

编辑:

请注意,在普通的 Ruby 中,bang 表示该方法与非 bang 对应的方法相比是“危险的”。通常(但不总是)这意味着该方法会更改其接收者。像 Rails 这样的框架可能有自己的约定(就像在这个答案中一样)。如有疑问,请查看文档。:)

于 2013-10-11T17:35:03.297 回答