diff options
-rw-r--r-- | actionpack/lib/action_dispatch/routing/polymorphic_routes.rb | 44 | ||||
-rw-r--r-- | actionview/test/template/test_test.rb | 2 |
2 files changed, 19 insertions, 27 deletions
diff --git a/actionpack/lib/action_dispatch/routing/polymorphic_routes.rb b/actionpack/lib/action_dispatch/routing/polymorphic_routes.rb index 9b76e7d7b5..7b97bf0157 100644 --- a/actionpack/lib/action_dispatch/routing/polymorphic_routes.rb +++ b/actionpack/lib/action_dispatch/routing/polymorphic_routes.rb @@ -135,57 +135,47 @@ module ActionDispatch record = record_list.pop - inflection = :singular + inflection = lambda { |name| name.singular_route_key } should_pop = true if record.try(:persisted?) should_pop = false elsif options[:action] == 'new' else - inflection = :plural + inflection = lambda { |name| name.route_key } end - record = record.respond_to?(:to_model) ? record.to_model : record - - #if options[:action] && options[:action].to_s == "new" - # inflection = :singular - #elsif (record.respond_to?(:persisted?) && !record.persisted?) - # inflection = :plural - #elsif record.is_a?(Class) - # inflection = :plural - #else - # args << record - # inflection = :singular - #end + args = [] route = record_list.map { |parent| - if parent.is_a?(Symbol) || parent.is_a?(String) + case parent + when Symbol, String parent.to_s + when Class + args << parent + parent.model_name.singular_route_key else - model_name_from_record_or_class(parent).singular_route_key + args << parent.to_model + parent.to_model.class.model_name.singular_route_key end } route << - if record.is_a?(Symbol) || record.is_a?(String) + case record + when Symbol, String record.to_s + when Class + args << record unless should_pop + inflection.call record.model_name else - if inflection == :singular - model_name_from_record_or_class(record).singular_route_key - else - model_name_from_record_or_class(record).route_key - end + args << record.to_model unless should_pop + inflection.call record.to_model.class.model_name end route << routing_type(options) named_route = action_prefix(options) + route.join("_") - args.pop if should_pop - args.delete_if {|arg| arg.is_a?(Symbol) || arg.is_a?(String)} - - args.collect! { |a| convert_to_model(a) } - recipient.send(named_route, *args, opts) end diff --git a/actionview/test/template/test_test.rb b/actionview/test/template/test_test.rb index 5721ee6c6f..88bac85039 100644 --- a/actionview/test/template/test_test.rb +++ b/actionview/test/template/test_test.rb @@ -39,6 +39,8 @@ class PeopleHelperTest < ActionView::TestCase with_test_route_set do person = Struct.new(:name) { extend ActiveModel::Naming + def to_model; self; end + def persisted?; true; end def self.name; 'Mocha::Mock'; end }.new "David" |