Current_page? inside controller

Is there any easy way of using something like current_page? method
from ActionView::Helpers::UrlHelper inside controller ?
I have routing like:
resources :addresses
resources :mailing_addresses, :controller => ‘addresses’

And I would like to do a check in my controller that would look like
this:

class AddressesController

def index
if current_page?(live_addresses_path)
# … logic goes here
elsif current_page?(addresses_path)
# … logic goes here
end
end

end

What’s the easiest way of achieving it ?

Robert Pankowecki

Robert Pankowecki wrote:

Is there any easy way of using something like current_page? method
from ActionView::Helpers::UrlHelper inside controller ?
I have routing like:
resources :addresses
resources :mailing_addresses, :controller => ‘addresses’

And I would like to do a check in my controller that would look like
this:

class AddressesController

def index
if current_page?(live_addresses_path)
# … logic goes here
elsif current_page?(addresses_path)
# … logic goes here
end
end

end

What’s the easiest way of achieving it ?

Robert Pankowecki

Hi Robert,
I think what you can check is params[:controller] and params[:action].
This would give you the current location in your app.

Thanks,
Anubhaw

resources :addresses
resources :mailing_addresses, :controller => ‘addresses’ <===== this
is
here confuses me, why not have another controller?

this will generate 7 restful action to a controller that has

already 7 restful action

but anyway it should be like this in you routes
:requirements => { :context_type => ‘addresses’}
and then in you controller check context_type == “addresses”

I have 3 different type of addresses fot person. I can create and
display them using same views currently (but that might change in the
future) so I created one controller which recognizes which kind of
address you want to deal with now by checking the URL. In a moment
when there is some benefit of maintaining them with separate
controllers then I can change it without changing urls.
Now going to /addresses shows all of them but going to /
mailing_addresses or /registered_addresses shows only subtypes. It’s
not so complicated to create another controller.

did you solve your problem?

On Fri, Sep 10, 2010 at 11:40 AM, Robert Pankowecki (rupert) <

Yes. It works ok with code that look something like that :

request.fullpath.include?(mailing_addresses_path)

Robert Pankowecki

I still can’t understand your example. What’s up with this
context_type ? Let’s say that I have 3 different kind of addresses.
What should I put in routes.rb and what should I check in controller ?

r.

with this
:requirements => { :context_type => ‘addresses’}
and then in you controller check context_type == “addresses”

its checked by the router instead of the controller

On Sat, Sep 11, 2010 at 2:35 PM, Robert Pankowecki (rupert) <

I think I started to understand your idea. You want me to write my own
custom routes for every action but in the place of URL where usually
controller name is place put my own custom requirement ?

like

get “user/:user_id/:addres_type/”
get “user/:user_id/:addres_type/new”
get “user/:user_id/:addres_type/:id”
get “user/:user_id/:addres_type/:id/edit”

?

Robert Pankowecki

check out how to user requirement here

On Sun, Sep 12, 2010 at 3:19 AM, Robert Pankowecki (rupert) <

i think this king of manipulation is more clear

and you dont need to declare one per resource route it works like this
too

resources :mailing_addresses, :controller => ‘addresses’,
:requirements => { :context_type => ‘addresses’}

then in the controller check for context_type like this

if params[:context_type] == “addresses”

you see is almost then same but less code

the result is similar but part of the work is done by the router, and
instead of checking the request object you check this

On Sun, Sep 12, 2010 at 3:38 PM, Robert Pankowecki (rupert) <