Rails 3.2.8 - 如何从模块中的application_controller.rb获取方法?

时间:2012-10-21 20:17:48

标签: ruby-on-rails ruby ruby-on-rails-3

我的controllers / application_controller.rb

中有以下方法
class ApplicationController < ActionController::Base
  protect_from_forgery

  private

  def check_api_credential(api_key)
    if Credential.find_by_key(api_key)
      true
    else
      false
    end
  end

end

在直接位于controllers文件夹下的所有控制器中,此方法都可以访问。

但控制器文件位于controllers / api / v1 / photos_controller.rb

module Api
  module V1
    class PhotosController < ActionController::Base
      respond_to :json

      def create
        redirect_to root_url if check_api_credentials(params[:params][2])
        if Photo.create(params[:params][0])
          render 'success'
        else
          render 'failure'
        end
      end
    end
  end
end

当我试图保存时,我得到了      未定义的方法'check_api_credentials'

如何从application_controllers.rb访问这些方法?它们位于控制器文件夹内。

2 个答案:

答案 0 :(得分:2)

class ApplicationController < ActionController::Base

class PhotosController < ActionController::Base

不响铃? “直接在控制器文件夹下”的所有其他控制器都继承自ApplicationController,但PhotosController不是ApplicationController的子项,它是它的兄弟。这就是它没有看到方法的原因。

您有没有从PhotosController继承ApplicationController的原因?

答案 1 :(得分:0)

在您的控制器中或您需要在不同位置调用私有方法的地方,您可以尝试使用try:方法。所以在你的代码中,

  def create
    redirect_to root_url if try: check_api_credentials(params[:params][2])
    if Photo.create(params[:params][0])
      render 'success'
    else
      render 'failure'
    end
  end

它可能会解决。不确定...只是尝试添加它并运行它....