2012-05-03 21 views
0

本质上,我有一个应用程序设计,我有一个用户模型和议程模型。议程'belongs_to'用户和用户'has_many“议程,这些是我的数据库关系。我可以启动IRB并正确获取数据库数据 user = User.first user.agendas 我将获得属于所有帖子的列表对该用户 我的问题发生在登录后,用户被重定向到home#index,但我在Home#index中得到一个NoMethodError undefined方法`议程'为零:NilClass 我确定我错过了一些东西。需要一个指数法在我的议程控制器还? ..app /视图/家庭/ index.html.erb未定义的方法'议程'为零: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 

我的议程控制器只是为未来的代码创建和销毁存根。 其型号/agenda.rb

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

catch my myproblem ... home.html.erb应该是current_user.agendas.any? – TheIrishGuy

+0

但议程不填充,任何人都看到显示代码的任何问题? – TheIrishGuy

回答

0

你的错误是从这个未来:

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

和错误说@usernil。你的控制器说:

def index 
    @agendas = ... 
end 

我没有看到@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

相关问题