2016-07-01 50 views
1

我有一個路線是這樣的:點在鐵軌導致錯誤

get ':user_name', to: 'profile#show', as: :profile 

而且表演方法看起來像這樣

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

http://stackoverflow.com/questions/8941462/how-to-encode-dot-in-url-rails – davidwessman

回答

0

這是兩個問題的組合:

  1. 您正在使用find_by而不是find_by!。正常版本在找不到記錄時不會引發ActiveRecord :: RecordNotFoundException,這會優雅地使rails響應nd與404和aport的before_action,這意味着@user結束設置爲零,所以你不能調用.posts就可以了。
  2. 正如@davidwessman在評論中指出的那樣,Rails路由默認情況下不能使用點。我懷疑你有一個名爲hello.world的記錄,但它試圖找到你好,所以它找不到任何東西。