nil的未定义方法`parent':NilClass

Lin*_*der 5 ruby ruby-on-rails ruby-on-rails-3

我使用Rails 3.0.2得到了这个奇怪的错误.

ActionView::Template::Error (undefined method `parent' for nil:NilClass):
app/controllers/channels_controller.rb:19:in `index'
Run Code Online (Sandbox Code Playgroud)

这是控制器,而行19respond_with(@channels)块.

我从哪里开始搜索错误?

class ChannelsController < ApplicationController
  before_filter :set_default_client
  respond_to :html, :xml

  def index
    if params[:cache_set]
      @channels = Channel.active.find_all_by_id(params[:cache_set])
    else
      @channels = Channel.active.find_all_by_id(cookies[:channels].split(','))
    end

    respond_with(@channels)
  end
end
Run Code Online (Sandbox Code Playgroud)

这是完整的错误:

ActionView::Template::Error (undefined method `parent' for nil:NilClass):
  app/controllers/channels_controller.rb:19:in `index'

Rendered /Users/linus/.rvm/gems/ruby-1.8.7-p330/gems/actionpack-3.0.2/lib/action_dispatch/middleware/templates/rescues/_trace.erb (1.3ms)
Rendered /Users/linus/.rvm/gems/ruby-1.8.7-p330/gems/actionpack-3.0.2/lib/action_dispatch/middleware/templates/rescues/_request_and_response.erb (19.8ms)
Rendered /Users/linus/.rvm/gems/ruby-1.8.7-p330/gems/actionpack-3.0.2/lib/action_dispatch/middleware/templates/rescues/template_error.erb within rescues/layout (28.6ms)
Run Code Online (Sandbox Code Playgroud)

我正在使用Ruby 1.8.7和Rails 3.0.2.我也是,为了以防万一,尝试了Rails 3.0.7和3.0.0.

小智 9

你在任何情况下使用HAML吗?

我刚刚碰到了这个,我的同事(还没有在Stackoverflow上)发现它是由于视图模板中的多行注释

-#
  = helper_method_1
  = helper_method_2
Run Code Online (Sandbox Code Playgroud)


Lin*_*der 2

我通过将 HAML 版本从 3.1.x 更改为 3.0.24 解决了该问题。

我的新 Gemfile 看起来像这样。

gem "rails", "3.0.2"
gem "haml", "3.0.24"
gem "compass", "0.10.6"
Run Code Online (Sandbox Code Playgroud)