Generate indexed names in input even when objects are not persisted

When you ask to generate multiple nested inputs using:

    field_for('comments[]', Comment.new) do |c|
      c.text_field :body

Rails should generated the names like `post[comments][][body]`.

To make sure we don't have regression the fake models now use the same
implementation of `#to_param` as `ActiveRecord::Base`

Fixes #26942
This commit is contained in:
Rafael Mendonça França 2017-01-03 16:44:07 -05:00
parent f8e040957b
commit 530e5ff910
No known key found for this signature in database
GPG Key ID: FC23B6D0F1EEE948
2 changed files with 17 additions and 6 deletions

View File

@ -16,7 +16,14 @@ module ActionView
@skip_default_ids = options.delete(:skip_default_ids)
@allow_method_names_outside_object = options.delete(:allow_method_names_outside_object)
@options = options
@auto_index = Regexp.last_match ? retrieve_autoindex(Regexp.last_match.pre_match) : nil
if Regexp.last_match
@generate_indexed_names = true
@auto_index = retrieve_autoindex(Regexp.last_match.pre_match)
else
@generate_indexed_names = false
@auto_index = nil
end
end
# This is what child classes implement.
@ -167,7 +174,11 @@ module ActionView
end
def name_and_id_index(options)
options.key?("index") ? options.delete("index") || "" : @auto_index
if options.key?("index")
options.delete("index") || ""
elsif @generate_indexed_names
@auto_index || ""
end
end
def skip_default_ids?

View File

@ -80,7 +80,7 @@ class Comment
def to_key; id ? [id] : nil end
def save; @id = 1; @post_id = 1 end
def persisted?; @id.present? end
def to_param; @id.to_s; end
def to_param; @id && @id.to_s; end
def name
@id.nil? ? "new #{self.class.name.downcase}" : "#{self.class.name.downcase} ##{@id}"
end
@ -101,7 +101,7 @@ class Tag
def to_key; id ? [id] : nil end
def save; @id = 1; @post_id = 1 end
def persisted?; @id.present? end
def to_param; @id; end
def to_param; @id && @id.to_s; end
def value
@id.nil? ? "new #{self.class.name.downcase}" : "#{self.class.name.downcase} ##{@id}"
end
@ -120,7 +120,7 @@ class CommentRelevance
def to_key; id ? [id] : nil end
def save; @id = 1; @comment_id = 1 end
def persisted?; @id.present? end
def to_param; @id; end
def to_param; @id && @id.to_s; end
def value
@id.nil? ? "new #{self.class.name.downcase}" : "#{self.class.name.downcase} ##{@id}"
end
@ -136,7 +136,7 @@ class TagRelevance
def to_key; id ? [id] : nil end
def save; @id = 1; @tag_id = 1 end
def persisted?; @id.present? end
def to_param; @id; end
def to_param; @id && @id.to_s; end
def value
@id.nil? ? "new #{self.class.name.downcase}" : "#{self.class.name.downcase} ##{@id}"
end