使用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
,然后重定向到500
或404
(不确定将哪一个重定向到,但不是重要)。
但在上面的情况中,它只会返回@user = nil
并继续呈现show
操作。如何以与搜索id
相同的方式对其进行编码?
答案 0 :(得分:3)
如果找不到记录,您可以使用.first!
(Docs)引发ActiveRecord::RecordNotFound
错误。
@user = User.where(:login => params[:login]).first!