Tablica w params dla obiektu

Natrafiłem dzisiaj na bardzo dziwną rzecz - albo mam totalne zaćmienie umysłowe albo to jest jakiś bug - nie mam pojęcia o co chodzi.

Prosty przykład

[code]# article.rb
model Article < ActiveRecord::Base
def assets=(value)
Rails.logger.info “Assets: #{assets.inspect}”
end
end

new.html.erb

<% form_for :article do |f| %>
<%= f.text_field “assets[]” %>
<%= f.text_field “assets[]” %>
<%= f.submit %>
<% end %>[/code]
Po wysłaniu takiej formy dostaję takie params:

{"article"=>{"assets"=>[nil, nil]}, "commit"=>"Save changes"} w logach: Assets: [nil, nil]
Jeżeli nie wrzucać tych pól w “article”, to wszystko jest ok:

[code]<% form_for :article do |f| %>
<%= text_field_tag “assets[]” %>
<%= text_field_tag “assets[]” %>
<%= submit_tag “Save changes” %>
<% end %>

params:

{“commit”=>“Save changes”, “assets”=>[“tekst”, “inny”]}[/code]

O co chodzi? Bo w tym momencie zwątpiłem :wink:

Zawsze mogę oczywiście użyć chociażby nested attributes i generować to jako hashe:

:assets => {"new_1" => {:attr1 => "costam"}}

Tylko dlaczego ta tablica się nie przekazuje?

Jakie są wygenerowane atrybuty “name” w obu przypadkach? Mnie się wydaje, że jest pewna różnica, tj.:

  • article[assets[]] w pierwszym przypadku
  • assets[] w drugim przypadku

Żeby działało tak jak chcesz, musi być article[assets][].

[quote=qoobaa]Jakie są wygenerowane atrybuty “name” w obu przypadkach? Mnie się wydaje, że jest pewna różnica, tj.:

  • article[assets[]] w pierwszym przypadku
  • assets[] w drugim przypadku

Żeby działało tak jak chcesz, musi być article[assets][].[/quote]
O cholera, czyli jednak zaćmienie - dzięki, zupełnie nie zwróciłem na to uwagi i “byłem pewien”, że name jest ok…