mirror of
https://github.com/rails/rails.git
synced 2022-11-09 12:12:34 -05:00
Fix form_for to work with objects that implement to_model
Previously, if you tried to use form_for with a presenter object
that implements to_model, it would crash in
action_dispatch/routing/polymorphic_routes.rb when asking the presenter
whether it is .persisted?
Now, we always ask .persisted? of the to_model object instead.
This seems to been an issue since 1606fc9d84
Signed-off-by: Eugenia Dellapenna <eugenia.dellapenna@gmail.com>
This commit is contained in:
parent
241ccaef88
commit
3efd90ac5b
2 changed files with 21 additions and 10 deletions
|
@ -247,7 +247,7 @@ module ActionDispatch
|
|||
args = []
|
||||
|
||||
model = record.to_model
|
||||
name = if record.persisted?
|
||||
name = if model.persisted?
|
||||
args << model
|
||||
model.model_name.singular_route_key
|
||||
else
|
||||
|
@ -290,11 +290,12 @@ module ActionDispatch
|
|||
when Class
|
||||
@key_strategy.call record.model_name
|
||||
else
|
||||
if record.persisted?
|
||||
args << record.to_model
|
||||
record.to_model.model_name.singular_route_key
|
||||
model = record.to_model
|
||||
if model.persisted?
|
||||
args << model
|
||||
model.model_name.singular_route_key
|
||||
else
|
||||
@key_strategy.call record.to_model.model_name
|
||||
@key_strategy.call model.model_name
|
||||
end
|
||||
end
|
||||
|
||||
|
|
|
@ -25,15 +25,17 @@ class Series < ActiveRecord::Base
|
|||
self.table_name = 'projects'
|
||||
end
|
||||
|
||||
class ModelDelegator < ActiveRecord::Base
|
||||
self.table_name = 'projects'
|
||||
|
||||
class ModelDelegator
|
||||
def to_model
|
||||
ModelDelegate.new
|
||||
end
|
||||
end
|
||||
|
||||
class ModelDelegate
|
||||
def persisted?
|
||||
true
|
||||
end
|
||||
|
||||
def model_name
|
||||
ActiveModel::Name.new(self.class)
|
||||
end
|
||||
|
@ -605,13 +607,18 @@ class PolymorphicRoutesTest < ActionController::TestCase
|
|||
end
|
||||
end
|
||||
|
||||
def test_routing_a_to_model_delegate
|
||||
def test_routing_to_a_model_delegate
|
||||
with_test_routes do
|
||||
@delegator.save
|
||||
assert_url "http://example.com/model_delegates/overridden", @delegator
|
||||
end
|
||||
end
|
||||
|
||||
def test_nested_routing_to_a_model_delegate
|
||||
with_test_routes do
|
||||
assert_url "http://example.com/foo/model_delegates/overridden", [:foo, @delegator]
|
||||
end
|
||||
end
|
||||
|
||||
def with_namespaced_routes(name)
|
||||
with_routing do |set|
|
||||
set.draw do
|
||||
|
@ -645,6 +652,9 @@ class PolymorphicRoutesTest < ActionController::TestCase
|
|||
end
|
||||
resources :series
|
||||
resources :model_delegates
|
||||
namespace :foo do
|
||||
resources :model_delegates
|
||||
end
|
||||
end
|
||||
|
||||
extend @routes.url_helpers
|
||||
|
|
Loading…
Reference in a new issue