Search code examples
ruby-on-railsurlhelper

In Rails, what's the URL helper for an unknown model?


I'm trying to get the path in Rails to a model that I don't necessarily know the class of in a rake task (so it's not in an .erb).

I know that I can do this:

Rails.application.routes.url_helpers.<model>_path(model)

But what if I don't necessarily know the model? It seems not Rails-y to switch on the model.class or any other such inspection. I'm just looking for the default path or url to the model.

Edit: To clarify what I mean by default path, it's the href you get when you do link_to; i.e., you can do this:

<%= link_to "my model", @model %>

without specifying a url helper like model_path. That's what I'm looking for.


Solution

  • Internally, link_to calls url_for to get the path for the given arguments.

    If you call url_for with a model, it'll forward further to polymorphic_path or polymorphic_url.

    So something like this should work, if you just want the path

    task :some_task => :environment do
      include Rails.application.routes.url_helpers
    
      # ...
    
      path  = polymorphic_path(some_model_instance) # => e.g. "/widgets/42"
    end
    

    You can also just use url_for, but you'll have to define the :host option. See here for more