我的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访问这些方法?它们位于控制器文件夹内。
答案 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
它可能会解决。不确定...只是尝试添加它并运行它....