url_for calls polymorphic_path() with the object you pass when you pass in an ActiveRecord (as well as some other cases). you can use polymorphic_url instead to get what you want.
link_to object.name, polymorphic_url(object)
Frage
I have two models, say User
and Group
I know I can access the show action to each object with the different solutions:
# PATH
link_to user.name, user_path(user)
link_to group.name, group_path(group)
# URL
link_to user.name, user_url(user)
link_to group.name, group_url(group)
But Rails' magic occurs when
# PATH
link_to user.name, user_path(user)
link_to group.name, group_path(group)
# is equivalent to
# PATH
link_to user.name, user
link_to group.name, group
Is there a way I can interpolate to get the url?
I could write something like this:
link_to user.name, send("#{user.class.name.downcase}_url", user)
But is there a cleaner way?
Lösung
url_for calls polymorphic_path() with the object you pass when you pass in an ActiveRecord (as well as some other cases). you can use polymorphic_url instead to get what you want.
link_to object.name, polymorphic_url(object)
Andere Tipps
Unfortunately there's no way to tell link_to to use the url when you pass only the model in. You'll have to stick to user_url
.
http://api.rubyonrails.org/classes/ActionView/Helpers/UrlHelper.html#method-i-link_to