0

我正在为我的小型照片业务制作日程安排应用程序。我正在使用 Trent Richardson 的 jQuery TimePicker 插件(它扩展了 jQueryUI 日期选择):https ://github.com/trentrichardson/jQuery-Timepicker-Addon因为时间是安排任务的关键部分。

为了编辑现有记录,我必须为绑定到 jQuery 小部件的文本输入字段提供 strftime 格式(否则时间部分不会默认为预先存在的内容)。

以下内容非常适合创建新记录:

<%= f.input :starts_at, :as => :string %>

以下内容非常适合编辑现有记录。不幸的是,当我尝试创建新记录(没有预先存在的“starts_at”内容)时,rails 应用程序崩溃了:

<%= f.input :starts_at, :as => :string, :input_html => { :value => localize(f.object.starts_at, :format => "%m-%d-%Y %I:%M %P") } %>

我一生都无法弄清楚如何(以表格形式)测试该领域中预先存在的内容,从而提供或不提供格式。如果有任何建议,我将不胜感激。

史蒂夫

4

2 回答 2

2

我谨慎乐观。对于我的情况,这似乎有效(不需要自定义输入类型):

<% if @assignment.new_record? %>
  <%= f.input :starts_at, :as => :string %>
  <% else %>
  <%= f.input :starts_at, :as => :string, :input_html => { :value => localize(f.object.starts_at, :format => "%Y-%m-%d %I:%M %P") } %>
<% end %>

同样,在 assignments.js.coffee 中使用这个(因为它必须匹配 jQuery 插件才能工作):

dateFormat: 'yy-mm-dd',
timeFormat: 'hh:mm tt'

我一直试图将条件与失败的 f.input 语句内联,然后我尝试测试 :starts_at 字段中的值,这同样失败了。测试这是否是新记录似乎有效。反正我的情况。

于 2013-07-04T19:31:10.480 回答
0

该字段的类型可能是 DateTime,这意味着您需要事先解析字符串。您可以使用 setter 方法或 before_validation 过滤器来执行此操作,例如:

def starts_at=(datetime)
  begin
    write_attribute(:starts_at, DateTime.strptime(datetime, "%m-%d-%Y %I:%M %P"))
  rescue ArgumentError
  end
end

def starts_at
  begin
    self[:starts_at].strftime("%m-%d-%Y %I:%M %P")
  rescue NoMethodError
  end
end

http://ruby-doc.org/stdlib-2.0/libdoc/date/rdoc/DateTime.html#method-c-parse

于 2013-06-25T00:09:52.400 回答