time_select空白字段保存表单提交时的默认时间

时间:2013-01-16 20:57:43

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

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

然而,正在发生的是为所有未被用户触摸的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
  6. 这是我的代码:

    _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
    

1 个答案:

答案 0 :(得分:1)

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

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

  

“my_time(1i)”=&gt;“1”,“my_time(2i)”=&gt;“1”,“my_time(3i)”=&gt;“1”,“my_time(4i)”=&gt; ;“”,“my_time(5i)”=&gt;“”

您需要在控制器中将时间设置为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