簡體   English   中英

未定義的方法'id'為nil:NilClass,Ruby on Rails

[英]Undefined method 'id' for nil:NilClass, Ruby on Rails

我不斷收到此錯誤,我不確定為什么。

現在是我的用戶控制器:

def show
    @user = User.find_by(id: params[:id])
end

和我嘗試過的

@user = User.find_by_id(params[:id])

@user  = User.find(params[:id])

而我目前的HTML:

<li><%= link_to "Profile", user_path(@user, show) %></li>

和我嘗試過的:

<li><%= link_to "Profile", user_path(@user) %></li>

<li><%= link_to "Profile", user_path(@user.id) %></li>

<li><%= link_to "Profile", "/users/#{@user.id}" %></li>

<li><%= link_to "Profile", user_path %></li>

<li><%= link_to "Profile", user_show_path %></li>

幫助表示贊賞。 謝謝!

rake routes 路線

注意: find_by可以返回nil。 因此,您必須在使用前對其進行檢查。

def show
    @user = User.find_by(id: params[:id])
    unless @user
      render status: 404, nothing: true
    end
end

我認為這是你的情況。 find_by只返回nil

您需要提供更多詳細信息。 我們需要確保您嘗試訪問的用戶(用戶)確實存在。 您可以按照以下方式進行檢查:

$ rails console --sandbox
Loading development environment in sandbox (Rails 4.2.1)
Any modifications you make will be rolled back on exit
2.2.3 :001 > User.all.count
   (12.5ms)  SELECT COUNT(*) FROM "users"
 => 2
2.2.3 :002 > id = User.first.id
  User Load (1.2ms)  SELECT  "users".* FROM "users"  ORDER BY "users"."id" ASC LIMIT 1
 => 3
2.2.3 :003 > app.user_path(id: id)
 => "/users/3"
2.2.3 :004 >

確保User.all.count返回的數字大於0。如果為0,則沒有用戶,您需要創建一個。

好的,這是要抓住的地方,我看到您使用了gem dev,並且您正在嘗試對USER執行CRUD ,所以設計可幫助用戶會話控制登錄和注銷的默認路由將取代傳統的users行為。

請參閱方法:通過CRUD界面管理用戶
或請參考之前的帖子
設計注冊控制器與我自己的“注冊”控制器沖突
我希望這能消除您的所有疑問
干杯

我需要添加user_path(current_user)而不是嘗試獲取ID。 感謝大家!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM