2016-09-01 35 views
2

我創建了一個小型運動應用程序,現在我遇到了在索引頁上只顯示當前用戶鍛鍊的問題。設計:我不能僅顯示當前用戶鍛鍊

問題:WorkoutsController#index中的NoMethodError。未定義的方法`鍛鍊'爲零:NilClass。

def index 
    @workouts = current_user.workouts.all 
end 

我把下面的所有細節:

協會

  1. 在我的用戶模型我有

    的has_many:試訓

  2. 在我的鍛鍊模式,我寫了

    belongs_to的:用戶

  3. 在我的意見/試訓/ index.html.erb

    <% @workouts.each do |workout| %> 
        <h4><%= link_to workout.date, workout %></h4> 
        <h3><%= workout.workout %></h3> 
    <% end %> 
    
+1

您是否錯過在控制器中添加'before_filter:authenticate_user!'? – kiddorails

+0

這意味着current_user是零(你還沒有登錄) –

+0

這種關係似乎沒有問題。檢查current_user。嘗試使用puts current_user.inspect來檢查。檢查它給出的內容,必須爲空 – SnehaT

回答

-1

試試這個:

def index 
    @workouts = current_user.present? ? current_user.workouts : [] 
end 

我認爲當你沒有愛好時會出現錯誤,並且current_user返回零

+0

更好地使用before_filter:authenticate_user!防止此例外 –

+0

當您使用:authenticate_user!你將無法訪問'索引'爲未登錄的用戶... –

+0

如果您閱讀的問題,你會看到,鍛鍊屬於用戶。並且無法在沒有用戶的情況下顯示。 –

0

如果您想獲取current_user的鍛鍊列表,則應該定義current_user。這意味着你需要登錄。你可以用濾鏡之前

before_filter :authenticate_user! 

很容易地檢查它,如果你想顯示另一個用戶的鍛鍊,你可以跳過過濾器,你用你的代碼

@workouts = current_user.workouts.all 

後新動作

class TestController < ApplicationController 

    before_filter :authenticate_user!, except: [:another_index] 

    def another_index 
    @workouts = User.find(params[:id]).workouts.all 
    end 

end 
+0

我在我的鍛鍊控制器 - > before_action:authenticate_user !,除了:[:index,:show]。這是令人沮喪的,因爲我在其他項目中只顯示了當前用戶帖子的相似內容,但我很困惑這個應用程序。格拉迪斯代碼適用於我。感謝所有的答案。祝你今天愉快。 – Morgan