【问题标题】:undefined method `agendas' for nil:NilClass Actioncontroller?nil:NilClass Actioncontroller的未定义方法“议程”?
【发布时间】:2012-05-13 06:03:17
【问题描述】:

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

【问题讨论】:

  • 发现了我的问题 ...home.html.erb 应该是 current_user.agendas.any?
  • 但是议程没有填充,有人看到显示代码有任何问题吗?

标签: ruby-on-rails ruby devise


【解决方案1】:

您的错误来自于此:

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

【讨论】:

  • 谢谢你的回答,我找到了。
猜你喜欢
  • 2013-01-25
  • 1970-01-01
  • 2013-07-16
  • 2017-01-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-10-05
相关资源
最近更新 更多