module ActionView::Helpers::UrlHelper
def to_form_params(attribute, namespace = nil)
to_form_params({ name: 'Denmark' }, 'country')
An optional namespace can be passed to enclose key names:
# => [{name: 'countries[]', value: 'Denmark'}, {name: 'countries[]', value: 'Sweden'}]
to_form_params(countries: ['Denmark', 'Sweden']})
# => [{name: 'country[name]', value: 'Denmark'}]
to_form_params(country: { name: 'Denmark' })
# => [{name: 'name', value: 'David'}, {name: 'nationality', value: 'Danish'}]
to_form_params(name: 'David', nationality: 'Danish')
suitable for use as the names and values of form input fields:
Returns an array of hashes each containing :name and :value keys
def to_form_params(attribute, namespace = nil) attribute = if attribute.respond_to?(:permitted?) attribute.to_h else attribute end params = [] case attribute when Hash attribute.each do |key, value| prefix = namespace ? "#{namespace}[#{key}]" : key params.push(*to_form_params(value, prefix)) end when Array array_prefix = "#{namespace}[]" attribute.each do |value| params.push(*to_form_params(value, array_prefix)) end else params << { name: namespace.to_s, value: attribute.to_param } end params.sort_by { |pair| pair[:name] } end