11

Has anybody experienced routes mysteriously becoming undetectable when using current_page? in Rails 3? Even with a fully generated scaffold complete with routes, a view, and a controller, I am getting a "No route matches" error.

Here's the code:

if current_page?(:controller => 'users', :action => "show")

If I add a "match" command to routes.rb, it works fine, but why would I need to do that if the resources have already been created? What am I missing?

paul
  • 4,333
  • 16
  • 71
  • 144
Dan
  • 113
  • 1
  • 5

3 Answers3

20

If you just want to test the current controller, you can do the following:

if params[:controller] == 'users'

Similarly, if you're using a namespaced controller, you can just use a slash to separate the namespace(s) from the controller name, e.g.:

if params[:controller] == 'advertising/users'
Matt Huggins
  • 81,398
  • 36
  • 149
  • 218
18

You're missing the id parameter from this helper:

current_page?(:controller => "users", :action => "show", :id => "1")

It expects you to pass a full route through. If you don't want this and only want to match on the controller and action then I would recommend coding your own.

Ryan Bigg
  • 106,965
  • 23
  • 235
  • 261
  • Is there any way to make it not worry about the `:id` parameter? E.g. can we use regex or something? Or is there another helper that can be used in place of `current_page?` – stevec Dec 03 '20 at 17:40
0

Depending on your routes, to look for a generic show action without ID you could look for e.g. !current_page?(:controller => "users", :action => "index").

thisismydesign
  • 21,553
  • 9
  • 123
  • 126