如何在Ruby on Rails中仅通过字段名称从jsonb字段中获取值?

How to get value from jsonb field only by name of field in Ruby on Rails?

提问人:Maksym Furgalo 提问时间:4/6/2023 更新时间:4/6/2023 访问量:51

问:

我是admin_rails宝石的新手。我有部分渲染包含该字段列表的模型字段中的字段。字段及其值在每个循环中呈现,因此在每次迭代中,我都有包含名称、data_type和其他字段的字段模型,但 jsonb 数据存储在其他模型中。有代码,其中字段在循环中作为名称传递。我怎样才能获得值以将默认值设置为date_field,因为我从 jsonb 和日历中获取字符串会崩溃。

这里我有DataModuleField模型,没有jsonb数据。也许我错过了什么?

<%= form.fields field.name, model: field.value do |dm_form| %>
  <% field.data_modules.each do |dm| %>
    <%= dm_form.fields dm.name, model: OpenStruct.new((field.value.presence || {})[dm.name]) do |field_form| %>
      <% dm.fields.each do |dm_field| %>
        <div class="form-group" style="margin-left: 0; margin-right: 0">
          <%= field_form.label dm_field.name, dm_field.label, class: 'col-sm-2 control-label' %>
          <div class="col-sm-10 controls">
            <% if dm_field.data_type == 'Float' %>
              <%= field_form.number_field dm_field.name, class: 'form-control', style: 'width: 50%', step: '0.000001' %>
            <% elsif dm_field.data_type == 'Enumeration' && dm_field.options.present? %>
              <%= field_form.select dm_field.name, ["", *dm_field.options], {}, class: 'form-control', style: 'width: 50%' %>
            <% elsif dm_field.data_type == 'Boolean' %>
              <%= field_form.check_box dm_field.name %>
            <% elsif dm_field.data_type == 'DateTime' %>
              <%= field_form.date_field dm_field.name, value: '%Y-%m-%d' %>
            <% elsif dm_field.data_type == 'Distribution' %>
              <%= render "data_modules_distribution_field", field: dm_field, form: field_form, model: OpenStruct.new(((field.value.presence || {})[dm.name].presence || {})[dm_field.name])%>
            <% else %>
              <%= field_form.text_field dm_field.name, class: 'form-control', style: 'width: 50%' %>
            <% end %>
          </div>
        </div>
      <% end %>
    <% end %>
  <% end %>
<% end %>

问题是我无法呈现日期。试图从 jsonb 字段为 String 调用“strftime”的 Rails。

我已经尝试将date_field的默认格式设置为,所有工作,但我无法设置默认值。在每次更新时,如果用户未选择日期,请将日期设置为今天。value: '%Y-%m-%d'

Ruby-on-Rails RubyGems Rails-admin HTML 渲染

评论


答:

0赞 Ariclene Chimbili 4/6/2023 #1

我没有完全理解主要思想,但如果你想在date_field中设置默认值,你可以使用“default”属性而不是“value”来做到这一点,如下所示:

<%= f.date_field :date_field, default: Date.today %>

在你的情况下,也许它可以是这样的:

<%= field_form.date_field dm_field.name, value: '%Y-%m-%d', default: your_default_date %>
1赞 Maksym Furgalo 4/6/2023 #2

解决方案是使用文本字段并将类型设置为日期时间:

<%= field_form.text_field dm_field.name, class: 'form-control', type: 'datetime-local' %>

所以现在 Rails 明白了如何正确使用这个字段。