尽管视图渲染得很好,但控制器方法永远不会执行

时间:2012-06-02 15:53:20

标签: ruby-on-rails ruby-on-rails-3 routing controllers

我的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)

2 个答案:

答案 0 :(得分:5)

首先,您不必定义操作方法。如果你只想渲染一个模板,那么只要模板foo存在,rails就会很乐意让你路由到SomeController#foo。

其次,要成为行动的方法必须是公开的。您的仪表板方法是私有的,因此它不会被视为操作,也不会被执行。由于您有dashboard.html.erb模板,因此rails会渲染它。

答案 1 :(得分:0)

如果要升级Rails应用并在控制器中具有旧式的“ before_filter”调用,则需要将其更改为“ before_action”。 “ before_filter”调用将崩溃并绕过控制器,但是模板仍将呈现而没有错误。