Submitting this form
<%= form_for @a do |f| %>
<% @a.vals.each do |val| %>
<%= f.text_field :vals, value: val, multiple: true %>
<% end %>
<%= f.submit %>
<% end %>
passes "a"=>{"vals"=>["first", "second", "third"]}
in the params to the controller.
As mentioned in the comments, you want to look at the vals
from an instance of A
not the class A
.
Note about the serialize
(more for the comments saying it looks wrong) I had never used it, that serialize :vals, Array
seems to be working for me
A.create(vals: ['hint 1', 'hint 2']); A.last.vals
# (0.2ms) BEGIN
# SQL (0.4ms) INSERT INTO ... [["vals", "---\n- hint 1\n- hint 2\n"]...
# (0.6ms) COMMIT
# A Load (0.3ms) SELECT "as".* FROM "as" ORDER BY "as"."id" DESC LIMIT $1 [["LIMIT", 1]]
# => ["hint 1", "hint 2"]
A.vals
is wrong because you are declaringvals
as a serialized field, which would be accessed from an instance ofA
, not the class object.serialize :vals, Array
looks wrong, becauseArray
isn't a serializer class. Won't be able to get more specific than that without more information. What is theform_for
orform_tag
for the example form? How isvals
initialized? – Illuminatiserialize :vals, Array
may be correct based on this answer - not 100% sure.) – Hardinessserialize
will default to YAML if you give it a non-coder class, and then it will pass the deserialized value intoArray.new
. – Illuminati