gpt4 book ai didi

ruby-on-rails - 带有 rails 的编辑表单中的 json 字段

转载 作者:行者123 更新时间:2023-12-03 15:53:06 25 4
gpt4 key购买 nike

我有一个 ruby 2.5rails 5.2 的项目。它有一个名为 Fruit 的模型,其中包括两个字段: name:stringoptions:json 。我想使用选项来存储一些数据,如 colorsize 等。

现在我有一个表格:

<%= form_with(model: fruit, local: true) do |form| %>

<div class="field">
<%= form.label :name %>
<%= form.text_field :name %>
</div>

<div class="field">
<%= form.label :options %>

<%= form.fields :options do |field| %>
<%= field.text_field :color %>
<%= field.text_field :size %>
<% end %>
</div>

<div class="actions">
<%= form.submit %>
</div>
<% end %>

它将成功地将数据保存到数据库中,包括 options 中的颜色和大小。但是,当我 edit 它时,它无法在选项中显示现有数据。

这意味着当我编辑水果时,如果我不重新设置颜色和大小,现有数据将丢失。

有谁知道如何使它正常工作?

标记为重复的问题是不同的。在那个问题中,他们询问 json 对象是否可以转换为字符串。

我的问题是按键显示表单中的值。

最佳答案

我找到了解决方案。

该表单将通过向 object 发送一个 getter 方法来显示每个值。 object 作为 form.object 存储在表单构建器中,代表模型。

但是,当按字段创建子表单时,不包括该对象。需要传入:

<%= form.fields :options, model: form.object.options do |field| %>

这样, field.object 将被分配给 options 作为 Hash 格式。

然而,这还不够。表单尝试通过调用方法来获取值。但是哈希属性不能接受方法调用。 options.color 不会返回该值,因此该值尚未显示在表单上。

一种解决方案是将模型转移到 OpenStructOpenStruct 允许您调用键作为获取值的方法。所以我使表单工作的解决方案是:
<%= form.fields :options, model: OpenStruct.new(form.object.options) do |field| %>

我将保持这个问题开放。如果您认为我的回答不是最佳实践或我的解释不准确,请留下您的回答。

关于ruby-on-rails - 带有 rails 的编辑表单中的 json 字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50848580/

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