2012-05-03 15 views
0

私はDeviseのアプリを持っています。私はユーザーモデルとアジェンダモデルを持っています。アジェンダ 'belongs_to'ユーザーとユーザー 'has_many "アジェンダ、これらは私のDB関係です。私はIRBを起動してdbデータを正しく取得できます。 user = User.first user.agendas と私はすべての投稿のリストを取得しますそのユーザーに サインイン時に問題が発生し、ユーザーはhome#indexにリダイレクトされますが、Home#indexの未定義メソッド `agendas 'でNoMethodErrorが返されます:NilClass 何かが欠落していると確信しています。私の議題コントローラにインデックスメソッドを必要とするも? ..app /ビュー/ホーム/ index.html.erb未定義のメソッド `agendas 'for nil:NilClass Actioncontroller?

<h3>Home</h3> 
<div class="row"> 
    <div class="span8"> 
     <% if @user.agendas.any? %> 
     <h3>Agendas</h3> 
     <ol class="agendas"> 
      <%= render @agendas %> 
     </ol> 
     <% end %> 
    </div> 
</div> 

私home_controller.rb

class HomeController < ApplicationController 
    before_filter :authenticate_user! 

    def index 
    @agendas = current_user.agendas.paginate(page: params[:page]) 
    end 

私のアジェンダコントローラには、将来のコード用の作成および破棄スタブがあります。

class Agenda < ActiveRecord::Base 
    attr_accessible :title 
    belongs_to :user 

    validates :title, presence: true, length: { maximum: 140 } 
    validates :user_id, presence: true 

    default_scope order: 'agendas.created_at DESC' 
end 
+1

私の問題を捕まえました... home.html.erbはcurrent_user.agendas.anyである必要がありますか? – TheIrishGuy

+0

アジェンダが作成されていないため、誰でも表示コードに関する問題はありますか? – TheIrishGuy

答えて

0

/agenda.rb そのモデルはあなたのエラーはここから来ている:

<% if @user.agendas.any? %> 

とエラーが@usernilであることを述べています。あなたのコントローラはこう言います:

私は@userに値が割り当てられていません。 authenticate_user!フィルタの設定が@userのいずれかとは思われません。

def index 
    @user = current_user 
    @agendas = @user.agendas.paginate(page: params[:page]) 
end 

そして:だから、あなたがこれを行うことができ

<% if @user.agendas.any? %> 
    <h3>Agendas</h3> 
    <ol class="agendas"> 
    <%= render @agendas %> 
    </ol> 
<% end %> 

をあなたのERBで直接current_userにもアクセスすることができました:

<% if current_user.agendas.any? %> 
    <h3>Agendas</h3> 
    <ol class="agendas"> 
    <%= render @agendas %> 
    </ol> 
<% end %> 

しかし、あなたはすでに行ってきたことに留意してください@agendasの計算に苦労するのですが、なぜそれを見るだけでコントローラを残しておくのはなぜですか?

<% if @agendas.present? %> 
    <h3>Agendas</h3> 
    <ol class="agendas"> 
    <%= render @agendas %> 
    </ol> 
<% end %> 
+0

答えをありがとう、私はそれを見つけた。 – TheIrishGuy