With a simple STI Employee < Person, I can write in the Person
view.rhtml.erb :
...
link_to 'Show', person
...
and the correct controller will be call depending on the actual
(concrete) type of the record.
I think this is because link_to() uses polymorphic_url() internally.
However, the restful helpers, such as edit_person_path() fail to
choose the correct controller and always route to the Person
controller. This seems inconsistent and confusing.
How can I reroute edit_person_path() to take the polymorphic type into
account, and route to the correct controller?
When you say link_to(text, record), a polymorphic url is constructed depending on the model. But when you say edit_person_path, you are explicitly stating that you are dealing with Person records and that no polymorphism should take place.
I understand that when using STI you have a need for a polymorphic helper, but I don’t think changing the behavior of named routes (explicit or automatically generated) is a solution - it would just be the source of more confusion for others.
Your cup of tea would be the edit_polymorphic_path helper, as in this example I just put up:
http://pastie.org/141162
No, that plugin was merged into trunk more than 8 months ago. Those methods aren’t documented because they are added dynamically by metaprogramming magic so RDoc doesn’t pick them up. I will be submitting a documentation patch for polymorphic URL helpers later today because this module was previously undocumented.