基本上我有一个app usong Devise,我有一个用户模型和一个议程模型。议程'belongs_to'用户和用户'has_many'议程,这些是我的数据库关系。我可以启动IRB并正确获取数据库数据 user = User.first user.agendas 我将获得属于该用户的所有帖子的列表 我的问题发生在登录时,用户被重定向到home #index,但我在Home中找到NoMethodError #index undefined方法`agendas'为nil:NilClass 我确定我错过了什么。我的议程控制器中是否还需要索引方法? ..app /视图/家/ index.html.erb
<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>
my 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
答案 0 :(得分:0)
您的错误来自:
<% if @user.agendas.any? %>
并且错误表明@user
是nil
。你的控制器说:
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 %>