How can I get rails to automatically populate a dy

2019-08-28 00:31发布

问题:

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.

回答1:

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"]