2013-12-16 28 views
0

當我用調試器通過這個時,它沒有命中控制器。Rails似乎沒有命中我的控制器

我得到以下錯誤:

Called id for nil, which would mistakenly be 4 -- if you really wanted the id of nil, use object_id

@user爲零。 @user是零,即使我將它設置爲找到通過@user = @Users.first

我想通過domain.com/id

的routes.rb

match ':id' => 'user#show' 

型號

class User < ActiveRecord::Base 
    attr_accessible :userLink, :userName 
end 
訪問用戶的第一個

控制器控制器/ user_controller.rb

def Show 
    @user= User.find_by_id params[:id] 
    # Attempted this with User.first to see if param was broken  

    respond_to do |format| 
     format.html 
     format.json { render json: @user} 
    end 
end 

查看文件名的意見/用戶/ show.erb

<script type="text/javascript"> 
    <%= @user.id %> 
</script> 

回答

1

您有一個錯字。

def Show在控制器應def show

+0

謝謝!我使用C#並使用大寫字母編寫我的方法! – LLL

+0

np!很高興幫助 – JaTo

+0

我在代碼庫上使用[rubocop](https://github.com/bbatsov/rubocop/)從java過渡,幫助我們以「ruby」方式獲得更多幫助。還要注意,匹配被認爲是「不安全的」。如果你的項目是開源的,請看看[pullreview](http://pullreview.com) – mestachs

1

你並不需要指定這樣的

路線就在這個

match ':id' => 'user#show' 

代之以

resources :users, only: [:show] 

這會爲你產生默認路由r show method

+0

我喜歡這種風格:'資源:用戶,只有:[:秀]'我會更新我的造型代碼,因爲很顯然,避免這類錯誤。 – LLL

+0

是的,它更好的導軌風格。 – Jeet

+0

而且不要忘記提高答案的答案,這樣它也可以幫助他人遵循它 – Jeet

1

使用

match '/:id' => 'user#show' 

但這並不是一個好方法,因爲你的很多航線將由 一樣,如果你有www.yourdomain被禁用。 com/profile也將進入您的演出行動。

也高清顯示這裏顯示應顯示

+0

我故意禁用其他路徑。我正在構建的應用程序只需創建並顯示用戶對象。我不希望用戶控制刪除或更新用戶數據。感謝您的建議,因爲我是一名Rails新手。儘管如果我決定爲自己添加一個管理員設置,我可能會重新考慮它。 – LLL