如何使用未知键编辑序列化数组

How to edit a serialized Array with unknown keys

我有以下带有序列化变量的模型:

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 %>

但它不起作用。有什么建议吗?

找到了解决方法,但不确定这是否已优化...

对于每个数组,使用 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'

我愿意接受其他解决方案。