比方说,我有一个模型我如何获得rails来自动填充动态生成的表单?
class A < ApplicationRecord
serialize :vals, Array
end
存储值的数组。我如何动态填充表单值列表?我的第一个猜测是写
<%= @a.vals.each_with_index do |v, i| %>
<%= f.text_field :hints %>
<% end %>
但这是给我的错误。
比方说,我有一个模型我如何获得rails来自动填充动态生成的表单?
class A < ApplicationRecord
serialize :vals, Array
end
存储值的数组。我如何动态填充表单值列表?我的第一个猜测是写
<%= @a.vals.each_with_index do |v, i| %>
<%= f.text_field :hints %>
<% end %>
但这是给我的错误。
提交此表单
<%= form_for @a do |f| %>
<% @a.vals.each do |val| %>
<%= f.text_field :vals, value: val, multiple: true %>
<% end %>
<%= f.submit %>
<% end %>
通过在PARAMS到控制器"a"=>{"vals"=>["first", "second", "third"]}
。
正如在评论中提到的,你想看看A
的实例vals
而不是类A
。
注意有关serialize
(更多的评论说,它看起来是错误的)我从来没有使用过它,serialize :vals, Array
似乎是为我工作
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"]
这工作完美!谢谢 – user1876508
另外,我为A. – user1876508
的实例做了一个拼写错误。仔细检查'serialize'的源码之后,似乎传递一个像'Array'这样的非编码类会导致它默认为'YAMLColumn',将反序列化的数据传递给'Array.new'。所以这里有一些令我困惑的魔法。 –
从广义上来说,'A.vals'是错误的,因为你声明'vals'是一个序列化的字段,可以从'A'的_instance_而不是类对象来访问。 'serialize:vals,Array'看起来不对,因为'Array'不是一个序列化类。没有更多信息,将无法获得更具体的信息。示例表单的“form_for”或“form_tag”是什么? vals是如何初始化的? –
您应该将错误添加到您的问题。而且,@AdamLassek也这么说。 (虽然,'serialize:vals,Array'可能是正确的基于[这个答案](https://stackoverflow.com/questions/19134235/how-to-add-to-a-serialized-array) - 不是100%当然) – jvillian
@AdamLassek serialize:vals,Array works – user1876508