我是新来的admin_rails gem。我有部分从包含字段列表的模型字段渲染字段。字段及其值在每个循环中呈现,因此在每次迭代中,我都有Field的模型,其中包含name, data_type和其他字段,但jsonb数据存储在其他模型中。有代码,其中字段在循环中作为name传递。我怎么能得到值设置默认值为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 %>
问题是我不能显示日期。Rails试图从jsonb字段调用'strftime'。
我已经尝试将date_field的默认格式设置为value: '%Y-%m-%d'
,所有工作,但我无法设置默认值。在每次更新时,如果用户没有选择日期,则将日期设置为今天。
解决方案是使用文本字段并将类型设置为datetime:
& lt; % = field_form。Text_field dm_field.name, class: 'form-control', type: 'datetime-local' %>
所以现在rails理解正确地使用这个字段。
我不太明白主要思想但是如果你想在date_field中设置一个默认值你可以使用"default"用"礼"代替"值"这样的:
<%= f.date_field :date_field, default: Date.today %>
在你的例子中可能是这样的:
<%= field_form.date_field dm_field.name, value: '%Y-%m-%d', default: your_default_date %>