geeky_monster
geeky_monster

Reputation: 8792

Controller method never gets executed although view is rendered fine

I have a strange problem with my Rails routing . I have a controllers called Page and a method called Page#dashboard

When I try to access /dashboard/1 the dashboard method of Page Controller never gets executed. But surprisingly the /pages/dashboard.html.erb is rendered fine .

Can someone explain me why ?

Code details as below . Thanks

Trying to access - /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

The logs are shown as below -

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)

Upvotes: 1

Views: 1076

Answers (2)

juargin
juargin

Reputation: 1

If you are upgrading a rails app and have old-style 'before_filter' calls in the controller, these need to be changed to 'before_action'. The 'before_filter' calls will crash and bypass the controller, but the template will still render with no errors.

Upvotes: 0

Frederick Cheung
Frederick Cheung

Reputation: 84114

First off, you don't have to define an action method. If all you want to do is render a template then as long as the template foo exists, rails will happily allow you to route to SomeController#foo.

Secondly, for a method to be an action is has to be public. Your dashboard method is private so it doesn't count as an action and doesn't get executed. Since you have a dashboard.html.erb template, rails does however render that.

Upvotes: 5

Related Questions