比方說,我有一個模型我如何獲得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