Rails在生产模式下抛出NoMethodError,但在开发模式下抛出NoMethodError

时间:2015-05-28 00:01:59

标签: ruby-on-rails ruby api ruby-on-rails-4 nomethoderror

我有以下代码:

module Api
module V1

class ApplicationController < ::ApplicationController

  def succeed_with_object(data, status_code = 200)
    render json: {success: true, data_type: 'object', data: data.as_json}, status: status_code
  end

end

end
end

其中ApplicationController是我所有api控制器的父控制器。 And :: ApplicationController是Web控制器中的父控制器。然后我有

module Api
module V1

class AppController < ApplicationController
  respond_to :json
  skip_before_filter  :verify_authenticity_token

  def android
    file_name = "app-latest-#{ANDROID_VERSION}.apk"
    app = MobileApp.new('android', ANDROID_VERSION, "http://example.com/download/#{file_name}")
    succeed_with_object(app)
  end

end

end
end

然后当我在生产模式中访问http://example.com/api/v1/app/android时,我遇到了

NoMethodError (undefined method `succeed_with_object' for #<Api::V1::AppController:0x0000000569bbd0>):
app/controllers/api/v1/app_controller.rb:11:in `android'

但它在开发模式下运行良好。我想知道生产模式和开发模式之间的继承层次是否有所不同。

1 个答案:

答案 0 :(得分:1)

尝试使用此结构:

class Api::V1::ApiController < ApplicationController
  respond_to :json
end

这将是所有API控制器的父控制器。

然后你可以使用上面的ApiController扩展你的api控制器。

class Api::V1::TransactionsController < Api::V1::ApiController
end