How can I access named routes in a Rails sweeper?

661 views Asked by At

I have a sweeper that reheats cache by opening urls in forked processes. It's easy enough to hard-code the host for those urls, but I want it to change dynamically, based on environment.

I know I can set global/environmental variables for this, but I'd really like to use named routes. Is there any way to do this?

(I should clarify that I've tried just putting the named routes in there but they don't resolve at runtime.)

2

There are 2 answers

1
apneadiving On BEST ANSWER

The closest I found is:

Rails.application.routes.named_routes.get(:user).defaults

Which retrieves:

{:action=>"show", :controller=>"users"}

But you should merge it with your params:

Rails.application.routes.named_routes.get(:user).defaults.merge({:id => 1})

Result:

{:action=>"show", :controller=>"users", :id=>1}

Edit:

Simply add

include Rails.application.routes.url_helpers 

to your class

0
tvdeyen On

I fixed this in the current Rails 3.2 beta:

https://github.com/rails/rails/pull/3876