-2

我的控制器/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/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 访问这些方法?它们位于控制器文件夹中。

4

2 回答 2

2
class ApplicationController < ActionController::Base

class PhotosController < ActionController::Base

不敲门吗?所有其他“直接在控制器文件夹下”的控制器都继承自ApplicationController,但PhotosController不是 的子级ApplicationController,而是它的兄弟。这就是为什么它没有看到方法。

你没有继承的原因是PhotosController什么ApplicationController

于 2012-10-21T20:21:15.780 回答
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

或许能解决 不确定...只需尝试添加并运行它...

于 2012-10-22T14:04:47.900 回答