我有这样的路线:
get ':user_name', to: 'profile#show', as: :profile
show方法看起来像这样
before_action :set_user
def show
@posts = @user.posts.order('created_at DESC')
end
def set_user
@user = User.find_by(user_name: params[:user_name])
end
一切似乎都很好。喜欢
如果我去localhost/hello
它的作品。
但是,如果我转到localhost/hello.world
,它就会出错并说undefined method posts for nil:NilClass
并且它也说
Parameters:
{"user_name"=>"hello",
"format"=>"world"}
但我们知道user_name
应该是hello.world
那为什么会出现这个错误? :(
显然我认为这条线正在制造问题
@user = User.find_by(user_name: params[:user_name])
如何修复它:(真烦人的问题:(
答案 0 :(得分:0)
这是两个问题的组合:
find_by
代替find_by!
。正常版本在找不到记录时不会引发ActiveRecord :: RecordNotFoundException,这会优雅地让rails响应404并使用before_action进行操作,这意味着@user
最终设置为没有,所以你不能打电话给.posts
。