Проблема перехода с Rails 2 на Rails 3 (nil.any?) - PullRequest
1 голос
/ 10 октября 2010

Я обновлял свое приложение с Rails 2.3.8 до Rails 3.

После выполнения всех основных задач (конфиги, маршруты и новый AR API, замены Authlogic на Devise) и получениянекоторые в основном статические страницы отображаются нормально. Я получаю сообщение об ошибке на остальной части моего сайта:

You have a nil object when you didn't expect it!
You might have expected an instance of Array.
The error occurred while evaluating nil.any?

Эта ошибка всегда появляется, когда я впервые ссылаюсь на SomeModel.Например, в моем news#index:

@news_story = NewsStory.new # gets called from before_filter

Полная трассировка стека приведена ниже.Трассировка, кажется, указывает на то, что модель в моем app/models/news_story.rb не загружается.

Я боролся с этим целый день.Кто-нибудь имеет представление о том, что происходит?

# stack trace:
activesupport (3.0.0) lib/active_support/dependencies.rb:497:in `load_missing_constant'
activesupport (3.0.0) lib/active_support/dependencies.rb:183:in `block in const_missing'
activesupport (3.0.0) lib/active_support/dependencies.rb:181:in `each'
activesupport (3.0.0) lib/active_support/dependencies.rb:181:in `const_missing'
app/controllers/news_controller.rb:82:in `new_post'
activesupport (3.0.0) lib/active_support/callbacks.rb:451:in `_run__810448074__process_action__85542351__callbacks'
activesupport (3.0.0) lib/active_support/callbacks.rb:409:in `_run_process_action_callbacks'
activesupport (3.0.0) lib/active_support/callbacks.rb:93:in `run_callbacks'
actionpack (3.0.0) lib/abstract_controller/callbacks.rb:17:in `process_action'
actionpack (3.0.0) lib/action_controller/metal/instrumentation.rb:30:in `block in process_action'
...

Действие контроллера:

class NewsController < ApplicationController
  before_filter :new_post_from_params, :only => :create
  before_filter :new_post, :only => [:index, :new]
  before_filter :find_post, :except => [:index, :create, :new]
  filter_access_to :all, :attribute_check => true

  def index
    @user = current_user
    @news = NewsStory.all
    respond_to do |format|
      format.html # index.html.erb
      format.xml { render :xml => @user.news }
    end
  end
  #...
  private

  def new_post_from_params
    @news_story = NewsStory.new(params[:news_story])
  end

  def new_post
    @news_story = NewsStory.new
  end

  def find_post
    @news_story = NewsStory.find(params[:id])
  end
end

Дополнительная информация:

1 Ответ

0 голосов
/ 12 октября 2010

Итак, проблема заключалась в том, что некоторые методы parent_ *, которые я определил в своем контроллере приложения, столкнулись с именами новых методов ActionController, чего не было в Rails 3.

У меня ушло на то, чтобы понять,черт побери

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...