-2

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 からこれらのメソッドにアクセスするにはどうすればよいですか? それらはコントローラーフォルダー内にあります。

4

2 に答える 2

2
class ApplicationController < ActionController::Base

class PhotosController < ActionController::Base

ベルを鳴らしませんか?「コントローラーフォルダーの直下」にある他のすべてのコントローラーは、から継承されますがApplicationControllerPhotosControllerの子ではなく、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 に答える