触发ActiveRecord :: RecordNotFound而不是返回nil

时间:2013-04-07 16:07:21

标签: ruby-on-rails

使用Rails 3.2。我正在为用户URL实现虚荣URL:

# routes.rb
resources :users
match 'u/:login' => 'users#show', :as => :main_user

# users_controller.rb
class UsersController < ApplicationController
  def show
    @user = User.where(:login => params[:login]).first
  end
end

通常,如果我们使用@user = User.find(params[:id]),它会返回ActiveRecord::RecordNotFound,然后重定向到500404(不确定将哪一个重定向到,但不是重要)。

但在上面的情况中,它只会返回@user = nil并继续呈现show操作。如何以与搜索id相同的方式对其进行编码?

1 个答案:

答案 0 :(得分:3)

如果找不到记录,您可以使用.first! (Docs)引发ActiveRecord::RecordNotFound错误。

@user = User.where(:login => params[:login]).first!