2012-10-21 15 views
-2

我在我的控制器/ application_controller.rbRails 3.2.8 - 如何獲取模塊內的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 

在直接位於控制器文件夾下的所有控制器下面的方法,這種方法是可到達的。

但在控制器控制器中的文件/ 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
class ApplicationController < ActionController::Base 

class PhotosController < ActionController::Base 

不響鈴嗎?所有其他控制器「直接在控制器文件夾下」是從ApplicationController繼承的,但PhotosController不是ApplicationController的子代,它是它的兄弟姐妹。這就是爲什麼它看不到該方法。

有沒有原因,你沒有繼承ApplicationControllerPhotosController

+0

我不認爲我在第二個問題上理解你的觀點。 控制器/ photos_controllers.rb中的相同photos_controllers.rb可以訪問該方法,我的觀點是如何讓我的控制器/ api/v1/photos_controllers.rb具有相同的訪問權限。我不知道該怎麼做。這是我的觀點。 –

+0

從'ApplicationController'繼承它。 –

+0

我試着在不同的地方添加ApplicationController並進行擴展,但Rails總是返回那些不能被方法接受的類,或者在ApplicationController的類中不接受方法。我不認爲你的方式有效。 –

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 

這可能會解決。不知道...只是嘗試添加此並運行它....

相關問題