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

gee*_*ter 1 routing ruby-on-rails controllers ruby-on-rails-3

我的Rails路由有一个奇怪的问题.我有一个名为Page的控制器和一个名为Page#dashboard的方法

当我尝试访问/ dashboard/1时,页面控制器的仪表板方法永远不会被执行.但令人惊讶的是/pages/dashboard.html.erb呈现得很好.

有人能解释一下为什么吗?

代码详情如下.谢谢

试图访问 - /dashboard/1

的routes.rb

match '/dashboard/:id' => 'page#dashboard'
Run Code Online (Sandbox Code Playgroud)

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
Run Code Online (Sandbox Code Playgroud)

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)
Run Code Online (Sandbox Code Playgroud)

Fre*_*ung 5

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

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