Ruby on rails 使用select_标记表示在一起的时间和分钟,我如何将其归因于这一天?

Ruby on rails 使用select_标记表示在一起的时间和分钟,我如何将其归因于这一天?,ruby-on-rails,Ruby On Rails,我不喜欢Rails开箱即用的日期选择,您可以选择小时、秒和分钟。我想要的是以半小时为增量迭代几小时和几分钟。像这样: def time_selection options = [] 48.times do |i| time = DateTime.now.beginning_of_day + (i*30.minutes) options << [time.strftime('%I:M %p'), time.strftime('%I:M %p')] end

我不喜欢Rails开箱即用的日期选择,您可以选择小时、秒和分钟。我想要的是以半小时为增量迭代几小时和几分钟。像这样:

def time_selection
  options = []
  48.times do |i|
    time = DateTime.now.beginning_of_day + (i*30.minutes)
    options << [time.strftime('%I:M %p'), time.strftime('%I:M %p')]
  end
  options_for_select(options, "[:scheduled_at(4i)]")
end
但现在,我想确保这段时间与其他选择框正确分配,用户可以在其中选择日期。日期和时间都与
[:scheduled\u at]
属性一致


我的问题是,我如何把这个信息与日期联系起来,以便它是一个日期时间?

< P>如果你想正确的方式,考虑猴子补丁。< /P> 如果您想要快速而肮脏的解决方案,只需确保小时和分钟的输入与
date\u select
生成的名称相同,但小时为(4i),分钟为(5i),秒为(6i)

例如,如果您的对象是
任务
的实例,则表单必须如下所示:

<div class="formRowTask">
  <label for="task_scheduled_at">Date</label>
  <select id="task_scheduled_at_3i" name="task[scheduled_at(3i)]">...</select>
  <select id="task_scheduled_at_2i" name="task[scheduled_at(2i)]">...</select>
  <select id="task_scheduled_at_1i" name="task[scheduled_at(1i)]">...</select>
</div>
<div class="formRowTask">
  <div class="time-selection-container">
    <select name="task[scheduled_at(4i)]">...</select>
    <select name="task[scheduled_at(5i)]">...</select>
  </div>
</div>

我认为有一些可以接受的解决方案。就我个人而言,我会在模型中创建两个虚拟属性:“scheduled_date”和“scheduled_time”以在视图中使用,然后在回调(例如:before_save)中解析每个属性,以创建DateTime scheduled_at以持久化到db

例如:我不知道您的数据到达模型时实际是什么样子,但如果计划日期为“%m/%d/%Y”,时间为“%I:%m%p”,则您的模型和回调中的方法可能会是这样的:

attr_accessor :scheduled_date, :scheduled_time #to use in your view

before_save :set_scheduled_at  #to parse both items into one attribute

def set_scheduled_at
  self.scheduled_at = DateTime.strptime("#{scheduled_date}-#{scheduled_time}", '%m/%d/%Y-%I:%M %p')
end
select_tag :scheduled_minutes, time_selection, :name => 'task[scheduled_at(4i)]' 
attr_accessor :scheduled_date, :scheduled_time #to use in your view

before_save :set_scheduled_at  #to parse both items into one attribute

def set_scheduled_at
  self.scheduled_at = DateTime.strptime("#{scheduled_date}-#{scheduled_time}", '%m/%d/%Y-%I:%M %p')
end