尽管视图呈现良好,但控制器方法从未执行过

问题描述 投票:1回答:2

我的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)
ruby-on-rails ruby-on-rails-3 routing controllers
2个回答
5
投票

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

其次,要使一种方法成为一种行动,必须是公开的。您的仪表板方法是私有的,因此它不算作动作,也不会执行。由于您具有dashboard.html.erb模板,因此rails会呈现该模板。


0
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.