1

Railsのルーティングに奇妙な問題があります。PageというコントローラーとPage#dashboardというメソッドがあります

/ Dashboard / 1にアクセスしようとすると、PageControllerのダッシュボードメソッドが実行されません。しかし、驚くべきことに、/ 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)
4

2 に答える 2

5

まず、アクションメソッドを定義する必要はありません。テンプレートをレンダリングするだけの場合は、テンプレートが存在する限りfoo、railsを使用するとSomeController#fooにルーティングできます。

第二に、メソッドがアクションであるためには、パブリックである必要があります。ダッシュボードメソッドはプライベートであるため、アクションとしてカウントされず、実行されません。ただし、dashboard.html.erbテンプレートがあるため、railsはそれをレンダリングします。

于 2012-06-02T16:10:26.557 に答える