【问题标题】:time_select blank field saves a default time when form is submittedtime_select 空白字段保存表单提交时的默认时间
【发布时间】:2013-01-16 20:57:43
【问题描述】:

我无法理解我的 time_select 选项。我的目标是在表单提交后仅在我的显示操作中呈现用户创建的时间选择。

然而发生的情况是,对于用户未触及的所有 time_select 字段,呈现默认时间 12:00 AM。我正在寻找一种方法来阻止默认时间值的保存(如果我不得不猜测,这是不可能的),或者创建一个允许我阻止默认时间值呈现的条件。

到目前为止,我已经查看了以下内容,但没有成功:

  1. Nil value on datetime_select?
  2. Optional time_select with allow_blank defaults to 00:00
  3. Rails time_select set default
  4. Rails 3: How to prevent my validations to pass a "nil time" from time_select dropdowns?
  5. http://api.rubyonrails.org/classes/ActionView/Helpers/DateHelper.html#method-i-time_select

这是我的代码:

_form.html.erb (only the snippet that I am having trouble with for brevity)


                    <td>
                    <span style="display: block; width: auto; margin-left: 4%">
                        <%= f.time_select :med1_time_of_day1, { include_blank: true, twelve_hour: true, minute_step: 15, ampm: true }, style: "width: 45%;" %>
                    </span>
                    <span style="display: block; width: auto; margin-left: 4%">
                        <%= f.time_select :med1_time_of_day2, { include_blank: true, twelve_hour: true, minute_step: 15, ampm: true }, style: "width: 45%;" %>
                    </span>
                    <span style="display: block; width: auto; margin-left: 4%">
                        <%= f.time_select :med1_time_of_day3, { include_blank: true, twelve_hour: true, minute_step: 15, ampm: true }, style: "width: 45%;" %>
                    </span>
                    <span style="display: block; width: auto; margin-left: 4%">
                        <%= f.time_select :med1_time_of_day4, { include_blank: true, twelve_hour: true, minute_step: 15, ampm: true }, style: "width: 45%;" %>
                    </span>
                </td>
                <td>

show.html.erb

<table class="table table-bordered table-striped">
        <thead>
            <th>Medication Name & Instructions for Use</th>
            <th>Time of Day</th>
            <th>
                Day(s) of the Month Medication was Taken
            </th>
        </thead>
        <tbody>
            <td>
                <%= @med_record_form.med1_name %>
                <%= @med_record_form.med1_instruct %>
            </td>
            <td>
                <% unless @med_record_form.med1_time_of_day1.nil? %>
                    <%= @med_record_form.med1_time_of_day1.strftime("%I:%M %p") %>
                    <br />
                <% end %>
                <% unless @med_record_form.med1_time_of_day2.nil? %>
                    <%= @med_record_form.med1_time_of_day2.strftime("%I:%M %p") %>
                    <br />
                <% end %>
                <% unless @med_record_form.med1_time_of_day3.nil? %>
                    <%= @med_record_form.med1_time_of_day3.strftime("%I:%M %p") %>
                    <br/>
                <% end %>
                <% unless @med_record_form.med1_time_of_day4.nil? %>
                    <%= @med_record_form.med1_time_of_day4.strftime("%I:%M %p") %>
                    <br />
                <% end %>
            </td>
        </tbody>
    </table>

注意:我也尝试过替换 @instance_var.nil?和 @instance_var.blank?和@instance_var.empty?没有成功。


以防万一需要控制器...

    med_record_forms_controller.rb

    class MedRecordFormsController < ApplicationController
  before_filter :get_resident

  def index
    @med_record_form = @resident.med_record_forms
  end

  def new
    @med_record_form = @resident.med_record_forms.build
  end

  def create
    @med_record_form = @resident.med_record_forms.build(params[:med_record_form])
    if @med_record_form.save
      redirect_to [@resident, @med_record_form] #, flash_class[:success] = "Form was created!"
    else
      render 'new' #, flash[:error] = "There was a problem with the form"
    end
  end

  def show
    @med_record_form = @resident.med_record_forms.find(params[:id])
  end

  def update
    @med_record_form = @resident.med_record_forms.find(params[:id])
    if @med_record_form.update_attributes(params[:med_record_form])
      flash[:success] = "Form updated"
      redirect_to controller: 'residents', action: 'show', id: params[:id]
    else
      render 'edit', flash[:error] = "Unable to update form"
    end
  end

  def edit
    @med_record_form = @resident.med_record_forms.find(params[:id])
  end

  def destroy
    @med_record_form = @resident.med_record_forms.find(params[:id])
    @med_record_form.destroy
    flash[:notice] = "You sure?"
    redirect_to resident_med_record_forms_path
  end

  private
  # get_resident converts the resident_id given by the routing
  # into an @resident object, for use in this controller & coresponding views
  def get_resident
    @resident = Resident.find(params[:resident_id])
  end
end

【问题讨论】:

    标签: ruby-on-rails ruby-on-rails-3 time-select


    【解决方案1】:

    这个问题类似这样:Optional time_select with allow_blank defaults to 00:00

    我发现 time_select 的默认设置将时间部分设置为空白,但有一个隐藏的日期组件未设置为空白。看参数就可以看到:

    "my_time(1i)"=>"1", "my_time(2i)"=>"1", "my_time(3i)"=>"1", "my_time(4i)"=>"", "my_time(5i)"=>""

    您需要在控制器中将时间设置为 nil,如下所示:

    def create
      @med_record_form = @resident.med_record_forms.build(params[:med_record_form])
      @med_record_form.med1_time_of_day1 = nil if params[:med_record_form]["med1_time_of_day1(4i)"].blank? && 
            params[:med_record_form]["med1_time_of_day1(5i)"].blank?
      if @med_record_form.save
        redirect_to [@resident, @med_record_form] #, flash_class[:success] = "Form was created!"
      else
        render 'new' #, flash[:error] = "There was a problem with the form"
      end
    end
    

    【讨论】:

    • 谢谢@RLawrenz!你的建议解决了我的问题。我希望很快找到一个更简洁的解决方案。如果我这样做,我会在这里发布。感谢您抽出时间帮助新手。
    猜你喜欢
    • 2016-05-16
    • 2016-04-08
    • 2014-09-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多