代码之家  ›  专栏  ›  技术社区  ›  glebm

从Rails 2迁移到Rails 3的问题(没有,有吗?)

  •  1
  • glebm  · 技术社区  · 16 年前

    我已经将我的应用程序从Rails 2.3.8升级到Rails 3。

    在完成了所有的基本工作(配置、路由和新的AR API,用Devise替换Authlogic)并使一些基本上是静态的页面显示良好之后,我在我的站点的其余部分得到了一个错误:

    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 这是第一次。 E、 g.,在我的 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 回复  |  直到 16 年前
        1
  •  0
  •   glebm    16 年前

    所以,问题是,我在应用程序控制器中定义的一些父方法与新的ActionController方法有名称冲突,这在Rails 3中没有发生。

    推荐文章