我正在为我的小型照片业务制作调度应用。 我正在使用Trent Richardson的jQuery TimePicker插件(它扩展了jQueryUI dateselect):https://github.com/trentrichardson/jQuery-Timepicker-Addon因为时间是调度任务的关键部分。
为了编辑现有记录,我必须为与jQuery小部件绑定的文本输入字段提供strftime格式(否则时间部分将不会默认为预先存在含量)。
以下内容非常适合创建新记录:
<%= f.input :starts_at, :as => :string %>
以下内容非常适合编辑现有记录。 不幸的是,当我尝试创建一个新记录(没有预先存在的“starts_at”内容)时,rails app会爆炸:
<%= f.input :starts_at, :as => :string, :input_html => { :value => localize(f.object.starts_at, :format => "%m-%d-%Y %I:%M %P") } %>
我不能为我的生活弄清楚如何测试(在表单中)该字段中预先存在的内容,从而提供格式与否。我会非常感谢任何建议。
史蒂夫
答案 0 :(得分:1)
我谨慎乐观。对于我的情况,这似乎是有效的(不需要自定义输入类型):
<% 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字段中测试一个值,同样失败了。 测试这是否是新记录似乎是有效的。无论如何,对于我的情况。
答案 1 :(得分: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