如何使用未知键编辑序列化数组
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'
我愿意接受其他解决方案。
我有以下带有序列化变量的模型:
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'
我愿意接受其他解决方案。