点导致轨道错误

时间:2016-07-01 20:51:35

标签: ruby-on-rails

我有这样的路线:

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])

如何修复它:(真烦人的问题:(

1 个答案:

答案 0 :(得分:0)

这是两个问题的组合:

  1. 您使用find_by代替find_by!。正常版本在找不到记录时不会引发ActiveRecord :: RecordNotFoundException,这会优雅地让rails响应404并使用before_action进行操作,这意味着@user最终设置为没有,所以你不能打电话给.posts
  2. 正如@davidwessman在评论中指出的那样,你不能在Rails路由上默认使用点。我怀疑你有一个名为hello.world的记录,但是它试图找到你好,所以它找不到任何东西。