我有以下带有序列化变量的模型:
create_expenses.rb
class CreateExpenses < ActiveRecord::Migration
def change
create_table :expenses do |t|
t.belongs_to :user, index: true
t.string :ref
t.integer :year
t.integer :month
t.text :traject_names, Array
t.text :vehicles_used, Array
t.text :nb_kms, Array
t.text :parkings, Array
t.text :trains, Array
t.text :taxis, Array
t.text :metros, Array
t.text :meals, Array
t.text :hotels, Array
t.text :natures, Array
t.text :amounts, Array
t.text :o_ns, Array
t.text :clients, Array
t.timestamps
end
end
end
expense.rb
class Expense < ActiveRecord::Base
belongs_to :user
serialize :traject_names
serialize :nb_kms
serialize :parkings
serialize :trains
serialize :taxis
serialize :metros
serialize :meals
serialize :hotels
serialize :natures
serialize :amounts
serialize :o_ns
serialize :clients
end
它们看起来都一样。示例:nb_kms = ["34", "4", "6"]
。
我希望能够编辑所有值。我尝试了几种方法,但没有找到任何工作。
我尝试过的最后一件事情如下:
<%= f.fields_for :nb_kms, @expense.nb_kms[i] do |answer_fields| %>
<%= answer_fields.text_field "", :value => @expense.nb_kms[i] %>
<% end %>
但它不起作用。有什么提示吗?
答案 0 :(得分:0)
找到了一种解决方法,但不确定这是否已经过优化......
对于每个数组,使用input
而不是f.text_field:
<input type="number" name="nb_kms[]" value="<%= @nb_kms[i] %>">
然后,在update
行动中:
params['nb_kms'].each_with_index do |nb_km, i|
@expense.nb_kms[i] = nb_km
end
if @expense.update(expense_params)
...
我正在为每个阵列做一个循环。可能更清洁的方式来更新我的阵列,但我不知道如何(在给定的索引处应该更新哪个数组?)
最后,由于我允许用户编辑show
查看页面中的数据,因此我必须在routes.rb
文件中添加此行:
patch '/expenses/:year/:month/' => 'expenses#update'
我对其他解决方案持开放态度。