0

我必须为某事选择日期和时间。我正在使用simple_form, 和 twitter 引导程序datepickertimepicker宝石。

首先,我无法自定义表单生成器以使一切正常工作,所以在我看来,我有硬编码:

<div class="control-group string optional">
          <label class="string optional control-label" for="publish_day">Publish Date</label>
          <div class="controls">
            <div class="input-append date" id="publish_date" data-date="<%= @press_release.published_day %>" data-date-format="dd-mm-yyyy">
              <input class="span2" type="text" name="press_release[publish_day]" value="<%= @press_release.published_day %>" readonly>
              <span class="add-on"><i class="icon-calendar"></i></span>
            </div>
          </div>
        </div>

       <div class="control-group string optional">
          <label class="string optional control-label" for="publish_time">Publish Time</label>
          <div class="controls">  
            <div class="input-append bootstrap-timepicker-component date">
              <input class="span2" id="publish_time" name="press_release[publish_time]" type="text" readonly>
              <span class="add-on"><i class="icon-time"></i></span>
            </div>
          </div>
        </div>

这是蹩脚的,可能不是“正确的”,但我不知道如何自定义 simple_form 足以让它为我做到这一点。

其次,要组合字段以添加到数据库中,这就是我在控制器中所做的事情:

params[:press_release][:publish_date] = Time.parse("#{params[:press_release][:publish_day]} #{params[:press_release][:publish_time]}")

这似乎真的很hacky,但我想不出另一种方法来做到这一点。从两个表单字段中获取数据然后合并并格式化它的更好方法是什么?我猜这是 before_save 的东西,但我不知道如何将它传递给以params这种方式调用的方法。

任何建议表示赞赏。提前致谢!

4

3 回答 3

1

您可以进行的一项改进是将解析/格式化移动到PressRelease模型中。

attr_accessor :publish_day, :publish_time

before_validate do
  self.publish_date = Time.parse([self.publish_day, self.publish_time].join(" ")) if self.publish_day.present?
end

这样你就可以将params值的重新分配保留在控制器之外(你是对的,它看起来确实很“hacky”)

于 2012-12-11T01:54:40.733 回答
0

我的回答是回到您的视图并尝试使其与“rails 字段”一起使用。我不会担心控制器并将两个字段连接在一起,我实际上认为这种方法是一个很好的解决方案。

所以我会查看表格并尝试获取日期和时间字段'railsy'

这是我的一个应用程序中的字段,该字段上也有一个日期选择器:

   = f.text_field :content_date, id: 'datepicker', size: 10

如果您对这种方法有错误,请发布您遇到的特定错误以及代码本身。

于 2012-12-11T02:01:43.437 回答
0

我没有代表发表评论,所以我会在这里发帖。

attr_accessor :publish_day, :publish_time

before_validation do
  self.publish_date = Time.parse([self.publish_day, self.publish_time].join(" ")) if self.publish_day.present?
end
于 2016-12-09T19:33:04.800 回答