SimpleForm中的条件语句

时间:2013-06-24 23:45:45

标签: ruby-on-rails simple-form conditional-statements

我正在为我的小型照片业务制作调度应用。 我正在使用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") } %>

我不能为我的生活弄清楚如何测试(在表单中)该字段中预先存在的内容,从而提供格式与否。我会非常感谢任何建议。

史蒂夫

2 个答案:

答案 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