Ruby on rails DateTime需要param

时间:2016-08-09 22:39:10

标签: ruby-on-rails ruby-on-rails-4

您好,我只需要从我的表单中请求param start_hour,以便我将它与数据库进行比较并检查它是否存在,但是当我需要像

这样的形式的param时
<%= f.datetime_select :start_hour, { :order => [:month, :day, :year, :hour, :minute], :prompt => { :day => 'Dia', :month => 'Mes', :year => 'Ano', :hour => 'Hora', :minute => 'Minuto' } }, {:class => "form-control", :style => "display: inline-block;
    width: auto;
    vertical-align: middle;"}  %>

我在控制器中将其视为零,我怎么能要求日期时间表呢?非常感谢。这是我的控制器

def create
        @start_hour     =   params[:courtesie][:start_hour]
        @lesson_check   =   Lesson.find_by(start_date: @start_hour)
        if @lesson_check.present?
            @new_courtesie  =   Courtesie.new(courtesie_params)
            @new_schedule   =   Schedule.new()
            @new_schedule.options   =   params[:courtesie][:name]
            @new_schedule.lesson_id =   @lesson_check.id
            @new_schedule.user_id   =   current_user.id

            if @new_courtesie.save && @new_schedule.save
                flash[:success] = "Cortesia agendada"
                redirect_to     cortesias_path
            end
        else
            flash[:warning] =   @start_hour
            redirect_to cortesias_path
        end

end

表单代码

<%= form_for(:courtesie, html: { class: "form-horizontal" } ) do |f| %>
                                                  <div class="form-group">
                                                    <label class="control-label col-md-2" for="sitename"> Nombre cortesia
                                                    </label>
                                                    <div class="col-md-9">
                                                      <%= f.text_field :name, class: 'form-control' %>
                                                    </div>
                                                  </div> 

                                                  <div class="form-group">
                                                    <label class="col-lg-2 control-label" for="sitename"> Fecha cortesia</label>

                                                    <div class="col-lg-10">
<%= f.datetime_select :start_hour, { :order => [:month, :day, :year, :hour, :minute], :prompt => { :day => 'Dia', :month => 'Mes', :year => 'Ano', :hour => 'Hora', :minute => 'Minuto' } }, {:class => "form-control", :style => "display: inline-block;
    width: auto;
    vertical-align: middle;"}  %>
                                                    </div>

                                                  </div> 

                                                  <div class="form-group">
                                                    <label class="control-label col-md-2" for="sitename"> Telefono </label>
                                                    <div class="col-md-5">
                                                      <%= f.number_field :phone, class: 'form-control' %>
                                                    </div>
                                                  </div>
                                                  <div class="form-group">
                                                    <label class="control-label col-md-2" for="sitename"> Email </label>
                                                    <div class="col-md-5">
                                                      <%= f.text_field :email, class: 'form-control' %>
                                                    </div>
                                                  </div> 
                                                  <div class="form-group">
                                                     <div class="col-lg-9 col-lg-offset-2">
                                                     <%= f.submit "Guardar", class: "btn btn-primary" %>
                                                        <button type="reset" class="btn btn-default">Reiniciar</button>
                                                     </div>
                                                  </div>
                                      <% end %>

2 个答案:

答案 0 :(得分:0)

检查您是否在强参数中设置参数。

def courtesie_params
  params.require(:courtesie).permit(:start_hour, ...)
end

如果不允许,它将是零。

答案 1 :(得分:0)

我假设您已在强参数中允许start_hour atrribute。与其他字段不同,您无法访问date_time字段中的值,例如params[:courtesie][:start_hour]

要了解我在说什么,请使用

替换create方法中的代码
def create
  render text: courtesie_params
end

现在,如果您提交表单,表单数据将显示为响应。

这就是表格数据的样子

{"name"=>"what", "start_time(1i)"=>"2016", "start_time(2i)"=>"8", "start_time(3i)"=>"9", "start_time(4i)"=>"23", "start_time(5i)"=>"40"}

嗯,你可以拥有更多的值,但我们可以专注于日期时间值。您可以查看所选值的存储位置。这就是params[:courtesie][:start_hour]为零的原因。

所以,你需要检索像

这样的值
datetime_params = params[:courtesie]
year = datetime_params["start_time(1i)"]
month = datetime_params["start_time(2i)"]
day = datetime_params["start_time(3i)"]
hour = datetime_params["start_time(4i)"]
minute = datetime_params["start_time(5i)"]

现在要比较两个日期时间,您实际上需要将收集的值转换为datetime

@start_hour = DateTime.new(year, month, day, hour, minute)

现在,您可以使用它来查询日期时间值并与其他日期时间值进行比较。

希望这有帮助!