Joe*_*nas 5 postgresql activerecord json ruby-on-rails ruby-on-rails-4.2
我在更新模型中的rails JSON列时遇到了一些问题.
我有一个OrderItem模型,带有:options列和postgres json数据类型.
我有一个表单,我只是尝试更新该JSON列中的两个属性.但是,当我从我的控制器运行更新操作时,它将整个选项列重置为仅我的表单中的字段,而不是仅更新两个单独的属性.这是一个错误吗?我在Rails 4.2.1上,从我读到的应该可以工作,我可以手动更新rails控制台中的各个属性.
在我的控制器中:
def update
@order_item.update(order_item_params)
respond_with(:update)
end
private
def order_item_params
params.require(:order_item).permit(:product_id, :quantity, options:[:esp, :size])
end
Run Code Online (Sandbox Code Playgroud)
我的表格:
<%= f.fields_for :options do |option| %>
<%= option.label :size %>
<%= option.select :size, options_for_select((5..13), item.options["size"]) %>
<%= option.select :esp, options_for_select(["yes","no"], item.options["esp"]) %>
<% end %>
Run Code Online (Sandbox Code Playgroud)
提交该表单时,它不会更新各个属性.它将整个json列重置为仅这两个属性
Form Data
utf8:?
_method:patch
order_item[quantity]:2
order_item[options][size]:5
order_item[options][esp]:no
Run Code Online (Sandbox Code Playgroud)
在控制台中我可以轻松地手动更新属性...
o = OrderItem.last
o.options["esp"] = "yes"
o.save
#PERSISTS!
Run Code Online (Sandbox Code Playgroud)
我没有完整的应用程序,但我假设当您仅输入这两个参数时 - 它不会执行您在控制台中运行的相同操作。提交表单后 - 您的所有参数都将被接受,而不仅仅是您添加到表单中的参数。
为了防止这种情况 - 您可以将所有其他字段添加为隐藏字段,这样可以保留数据。
| 归档时间: |
|
| 查看次数: |
1756 次 |
| 最近记录: |