Rails过滤多个时间段的数据

时间:2016-04-23 13:44:22

标签: ruby-on-rails database

我希望让我的用户决定某些内容可以出现的时间段。

it's divide into two partial:
1.for date (like 2016,01,01~2016,12,20)
2.for hour (like 11:00~13:00)

用户可以为内容添加多个时间段设置, 例如

  • 11:00~12:00
  • 17:00~19:00
  • 2016,03~2016,07
  • 2017,01,20〜2017,01,22

我该如何实现它?为内容表添加一个包含四个时间列(开始日期,结束日期,开始时间,结束时间)的关联表或任何有用的宝石?

1 个答案:

答案 0 :(得分:0)

嘿,我在手机上,但是当我回到家时会更新这个答案。这基本上就是你要找的东西,但数据窗口是在某些天而不是dateTime之间,所以你必须增加小时/分钟等。它也使用SimpleForm gem但是你可以使用rails regular_for来轻松地将表单修改为jive。使用jquery datepicker,因为它非常棒且易于配置。需要注意的关键是你的jquery datepicker输入是一个字符串,所以你必须重新格式化它,如下所示。在下面的视图中,您需要为要为其添加日期选择器的每个表单元素添加一个类(我使用了类' datepicker'):

enter image description here

<%= simple_form_for @ionit_tank_input, url: controller_path_here, html: { multipart: true, method: :post, class: "whatever_css_styling_classes", role: "form"} do |f| %>
   <%= f.error_notification %>
      <div class="form-group">
         <%= f.input :date1, as: :string, :placeholder => 'From (MM/DD/YYYY)', label: false, required: false, input_html: {class: "form-control form-input-colorss datepicker"} %>
            </div>
         <div class="form-group">
           <%= f.input :date2,  as: :string, :placeholder => 'To (MM/DD/YYYY)', label: false, required: false, input_html: {class: "form-control form-input-colorss datepicker"} %>
         </div>

       <%= f.submit "See History", class: "btn btn-primary block full-width m-b" %>
<% end %>

安装了jquery datepicker后,将此脚本添加到相应的资产js文件中。

<script type="text/javascript">
 $('input.datepicker').datepicker({
        keyboardNavigation: false,
        forceParse: false,
        autoclose: true
    });
</script>

然后在您的控制器中,您可以格式化根据需要选择的传入日期/时间。下面的代码是将其格式化为一个月/日/年,但您也可以添加HH:MM只记得通过表单输入的用户输入将是一个字符串,因此您需要使用strptime进行转换。

from = DateTime.strptime("#{params[:ionit_tank_input][:date1]}", '%m/%d/%Y')
to = DateTime.strptime("#{params[:ionit_tank_input][:date2]}", '%m/%d/%Y')
to = to + 1.day
@inputs = @tank.ionit_tank_inputs.where(["created_at > ? and created_at < ?", from, to ])

@inputs现在是您在这两天之间选择的信息。如果您愿意,可以使用日期时间。