0

本质上,我有一个使用 Devise 的应用程序,我有一个用户模型和一个议程模型。议程“belongs_to”用户和用户“has_many”议程,这些是我的数据库关系。我可以启动 IRB 并正确获取数据库数据 user = User.first user.agendas,我将获得属于该用户的所有帖子的列表我的问题在登录时出现,用户被重定向到 home#index 但我在 Home#index undefined method `agendas' for nil:NilClass 中得到 NoMethodError 我确定我错过了什么。我需要一个 index 方法吗我的议程控制器也是?..app/views/home/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>

我的 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
4

1 回答 1

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 %>

您也可以current_user直接在您的 ERB 中访问:

<% 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 %>
于 2012-05-03T17:35:12.567 回答