gpt4 book ai didi

ruby-on-rails - Postgres JSON 列使用表单更新单个键/属性

转载 作者:行者123 更新时间:2023-11-29 11:30:15 25 4
gpt4 key购买 nike

我在更新模型中的 Rails JSON 列时遇到了一些问题。

我有一个 OrderItem 模型,它有一个 :options 列,数据类型为 postgres json。

我有一个表单,我只尝试更新该 JSON 列中的两个属性。但是,当我从 Controller 运行更新操作时,它将整个选项列重置为仅表单中的字段,而不是仅更新两个单独的属性。这是一个错误吗?我使用的是 Rails 4.2.1,根据我的阅读,这应该可以工作,而且我可以在 Rails 控制台中手动更新各个属性。

在我的 Controller 中:

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

我的表格:

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

提交该表单时,它不会更新各个属性。它将整个 json 列重置为仅这两个属性

Form Data
utf8:✓
_method:patch
order_item[quantity]:2
order_item[options][size]:5
order_item[options][esp]:no

在控制台中,我可以轻松地手动更新属性...

o = OrderItem.last
o.options["esp"] = "yes"
o.save

#PERSISTS!

最佳答案

我没有你的完整应用程序,但我假设当你只输入这 2 个参数时 - 它不会执行你在控制台中运行的相同操作。提交表单时 - 您的所有参数都应该被接受,而不仅仅是您添加到表单中的参数。

为了防止这种情况 - 您可以将所有其他字段添加为隐藏,这样可以保留数据。

关于ruby-on-rails - Postgres JSON 列使用表单更新单个键/属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29310629/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com