1

在 Rails 5.1 中,我使用 time_select 助手从“时间”数据类型的表列创建了一个下拉列表:

<div class="col-md-12">
   <%= form_for(Sleep.new) do |f| %>
   <%= f.time_select :hours, {minute_step: 5, prompt: true, order: [:hour]} %>
   <%= f.submit "Submit" %>
   <% end %>
</div>

默认情况下,提示将下拉菜单设置为“小时”字符串。在 html 中,这一行没有任何价值:

<select id="sleep_hours_4i" name="sleep[hours(4i)]">
<option value="">Hour</option>
<option value="00">00</option>

但是,当用户没有从下拉列表中选择任何内容并使用默认的“小时”选项提交时,表单会将值发送到数据库:

0001-01-01 00:00:00

由于“小时”的值不是零,我的验证(如果没有从下拉列表中选择任何内容,它应该给用户一个通知)不起作用。

我怎样才能仍然拥有“小时”默认值,但将此选项的值设置为 nil(禁止在提交此选项时向数据库发送任何值)并能够向用户发出“选择一个小时!”之类的通知。在这种情况下?

4

1 回答 1

1

事实证明,您只需要一个默认提示,如果未选择任何选项,则将 null 发送到 db,如果选择了选项,则将值发送到 db 是添加ignore_date: truef.time_select属性。所以我刚转身

<%= f.time_select :hours, {minute_step: 5, prompt: true, order: [:hour]} %>

至:

<%= f.time_select :hours, {minute_step: 5, prompt: true, ignore_date: true, order: [:hour]} %>
于 2017-04-24T21:45:46.793 回答