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

时间:2015-02-09 17:02:39

标签: ruby-on-rails arrays serialization

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

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

但它不起作用。有什么提示吗?

1 个答案:

答案 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'

我对其他解决方案持开放态度。