我的Rails路由有一个奇怪的问题。 我有一个名为Page的控制器和一个名为Page#dashboard
的方法当我尝试访问/ dashboard / 1时,页面控制器的仪表板方法永远不会被执行。 但令人惊讶的是/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 - Pages / 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 :(得分:5)
首先,您不必定义操作方法。如果你只想渲染一个模板,那么只要模板foo
存在,rails就会很乐意让你路由到SomeController#foo。
其次,要成为行动的方法必须是公开的。您的仪表板方法是私有的,因此它不会被视为操作,也不会被执行。由于您有dashboard.html.erb模板,因此rails会渲染它。
答案 1 :(得分:0)
如果要升级Rails应用并在控制器中具有旧式的“ before_filter”调用,则需要将其更改为“ before_action”。 “ before_filter”调用将崩溃并绕过控制器,但是模板仍将呈现而没有错误。