【问题标题】:Formatting a date input using simple_form使用 simple_form 格式化日期输入
【发布时间】:2013-11-14 16:18:36
【问题描述】:

我的数据库中有一个date 类型字段。

这是我正在使用的视图代码:

# Using 'as: :string' to avoid those three dropdowns rails generates.
= f.input_field :start_date, as: :string, class: 'form-control datepicker'

保存日期时,我使用一个 jquery 插件,该插件显示日历并写入日期,例如:11/05/2013

但在编辑同一条记录时,输入会填充值2013-05-11

我怎样才能让它变得如此简单_form实际上尊重我在en.yml中定义的日期格式?

【问题讨论】:

    标签: html ruby-on-rails date input simple-form


    【解决方案1】:

    这是你需要的:

    f.input :my_date,
            :as => :string, 
            :input_html => { :value => localize(f.object.my_date) }
    

    PS : 这是 google search 的第一个链接 :)

    【讨论】:

    • 还值得知道您可以指定本地化功能的格式,例如localize(f.object.my_date, format: :short)
    • 也可以提供格式如:localize(f.object.my_date, format: "%-m/%d/%Y")
    • 现在 this 是我谷歌搜索中的第一个链接。 :)
    • 这不适用于 HTML5 日期字段,例如在移动 Safari 浏览器上。 HTML5 日期字段期望值采用 yyyy-mm-dd 格式。这个问题有解决办法吗?
    • @morgler, localize(f.object.my_date, format: "%yyy-%mm-%dd")
    【解决方案2】:

    我创建了这个类,它可以很容易地做到这一点:

    f.input :my_date, :as => :date_picker
    

    将此类添加到您的 lib/ 文件夹并确保包含它(或将其配置为自动加载):

    class DatePickerInput < SimpleForm::Inputs::StringInput
      def input
        value = @builder.object.send(attribute_name)
        input_html_options[:value] = case value
                                       when Date, Time, DateTime
                                         format = options[:format] || :medium
                                         value.to_s(format)
                                       else
                                         value.to_s
                                     end
    
        input_html_options[:class] ||= []
        input_html_options[:class] << "date_picker_input"
        @builder.text_field(attribute_name, input_html_options)
      end
    end
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-09-13
      • 1970-01-01
      • 2018-10-13
      • 1970-01-01
      • 2020-05-27
      相关资源
      最近更新 更多