2012-06-02 29 views
1

我的Rails路由有一個奇怪的問題。 我有一個名爲Page的控制器和一個名爲Page#儀表板的方法控制器方法永遠不會執行,儘管視圖呈現良好

當我嘗試訪問/ dashboard/1時,Page Controller的儀表板方法從未得到執行。 但令人驚訝的是/pages/dashboard.html.erb顯示正常。

有人可以解釋我爲什麼嗎?

代碼詳情如下。由於

嘗試訪問 - /dashboard/1

的routes.rb

match '/dashboard/:id' => 'page#dashboard' 

Page_Controller.rb

class PageController < ApplicationController 

    before_filter :init 

    private 

    def init 

    puts "init getting executed !!!!!!!!!" #this gets printed on console 

    end 

    def dashboard 

    puts "dashboard getting executed !!!!!!!!!" #this doesnt get printed on console 


    end 

end 

的ViewPage - 頁/ dashboard.html.erb

的日誌如下所示 -

init getting executed !!!!!!!!! 
Started GET "/dashboard/8" for 127.0.0.1 at 2012-06-03 00:04:40 +0800 
Processing by PageController#dashboard as HTML 
    Parameters: {"id"=>"8"} 
    Rendered page/dashboard.html.erb within layouts/page (45.9ms) 
Completed 200 OK in 180ms (Views: 133.6ms | ActiveRecord: 3.1ms) 
+0

您是否嘗試過傳遞給'routes.rb'設置的'id'參數? –

+0

是的。我試圖訪問/儀表板/ 1。不應該讓ID = 1? –

+0

最新的錯誤信息?你能粘貼你的'routes.rb'文件嗎? –

回答

5

首先,您不必定義操作方法。如果你只想渲染一個模板,那麼只要模板foo存在,rails會很高興地讓你路由到SomeController#foo。

其次,一個方法是一個行爲必須是公開的。您的儀表板方法是私人的,因此它不會被視爲操作並且不會被執行。既然你有一個dashboard.html.erb模板,然而rails會渲染它。

+0

謝謝。我只是在發佈這裏的方法的同時刪除了我的儀表板的內容,使問題變得簡單明瞭。然而,你的答案的第二段確實回答了我的問題。我並不知道添加私有方法使得下面的所有方法都是私有的。我只是修改它,它工作正常。非常感謝 –