Let's say I have a model
class A < ApplicationRecord
serialize :vals, Array
end
which stores an array of values. How can I dynamically populate a list of form values? My first guess was to write
<%= @a.vals.each_with_index do |v, i| %>
<%= f.text_field :hints %>
<% end %>
but this is giving me errors.
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"]