引导日期选择器默认值simple_form_for(Bootstrap datepicker def

2019-09-01 23:57发布

我使用的是引导日期选择器,使使用simple_form_for的形式日期的选择。 例如

  <%= f.input :payment_date, as: :string, input_html: { class: "datepicker" } %>

我的日期选择器使用DD-MM-YYYY的格式

我想作为形式的默认值使用simple_form_for,我如何能做到这一点任何想法来设定今天的日期?

Answer 1:

<%= f.input :payment_date, as: :string, input_html: { class: "datepicker", value: Time.now.strftime('%d-%m-%Y') } %>   

它的另一种形式是:(有效的管理工作宝石)

f.input :date, as: :date_picker, :input_html => { :value => Date.today}


Answer 2:

您也可以使用这种宝石: https://github.com/Nerian/bootstrap-datepicker-rails

gemfile.rb

gem 'bootstrap-datepicker-rails'

然后捆绑安装并重新启动服务器导轨

那么这行添加到应用程序/资产/样式表/ application.css

 *= require bootstrap-datepicker

并添加此行应用程序/资产/ JavaScript的/ application.js中

 //= require bootstrap-datepicker

并在表单中使用:

<%= f.text_field :payment_date, :id => "datepicker", :value => Date.today %>

并添加您的形式相同的观点此javascript

<script>
$('#datepicker').datepicker({format: 'yyyy-mm-dd'});
</script>


Answer 3:

我还需要得到这个工作,并支持不使用以美国为中心的日期格式多个区域设置,如:EN-AU(澳大利亚),其中有日期格式DD / MM / YYYY。

问题

Rails的预计日期格式是yyyy-mm-dd从浏览器,但要显示在用户的语言环境的日期。 虽然日期控件允许您指定显示格式它不允许你分别指定格式发送回服务器。

解决方案

构建发送的正确格式返回给你的Rails服务器隐藏的输入字段。 我这样做与那两个建立的日期选择器输入字段和隐藏字段的自定义simple_form输入控制,并使用一些JavaScript来转换为轨道时的日期输入控制的变化。

其结果是,你可以在导轨一个很好的引导日期选择器,并与simple_form使用它,如下所示:

<%= f.input :date, as: :bootstrap_datepicker %>

或者使用长日期格式:

<%= f.input :date, as: :bootstrap_datepicker, input_html: { format: :long } %>

履行

创建或编辑以下文件:

的Gemfile

gem 'bootstrap-sass'
gem 'bootstrap-datepicker-rails'

配置/区域设置/ EN-AU.yml

en-AU:
  date:
    datepicker:
      default: "dd/mm/yyyy"
      long: "dd MM, yyyy"
    formats:
      default: ! '%d/%m/%Y'
      long: ! '%d %B, %Y'

配置/区域设置/ EN-US.yml

en-US:
  date:
    datepicker:
      default: "mm/dd/yyyy"
      long: "MM dd, yyyy"
    formats:
      default: "dd/mm/yyyy"
      long: ! '%B %d, %Y'

应用程序/资产/样式表/ application.css.scss

@import "bootstrap-responsive";
@import "bootstrap-datepicker";

应用程序/资产/ JavaScript的/ application.js.coffee

#= require bootstrap
#= require bootstrap-datepicker
#= require bootstrap-datepicker-rails

另外, 应用程序/资产/ JavaScript的/ application.js中

//= require bootstrap
//= require bootstrap-datepicker
//= require bootstrap-datepicker-rails

应用程序/资产/ JavaScript的/ bootstrap-datepicker-rails.js.coffee

$ ->
  # convert bootstrap-datepicker value to rails date format (yyyy-mm-dd) on our hidden field
  $(document).on 'changeDate', '.bootstrap-datepicker', (evt) ->
    rails_date = evt.date.getFullYear() + '-' + ('0' + (evt.date.getMonth() + 1)).slice(-2) + '-' + ('0' + evt.date.getDate()).slice(-2)
    $(this).next("input[type=hidden]").val(rails_date)

应用程序/输入/ bootstrap_datepicker_input.rb

class BootstrapDatepickerInput < SimpleForm::Inputs::Base
  def input
    text_field_options = input_html_options.with_indifferent_access
    format =  text_field_options.delete(:format)
    hidden_field_options = text_field_options.dup
    hidden_field_options[:class] = text_field_options[:class].dup # so they won't work with same array object
    hidden_field_options[:id] = "#{attribute_name}_hidden"
    text_field_options[:class] << 'bootstrap-datepicker'
    text_field_options[:type] = 'text'
    text_field_options[:value] ||= format_date(value(object), format)
    set_data_option text_field_options, 'date-format', I18n.t(format, scope: [:date, :datepicker], default: :default)
    default_data_option text_field_options, 'provide', 'datepicker'

    return_string =
      "#{@builder.text_field(attribute_name, text_field_options.to_hash)}\n" +
      "#{@builder.hidden_field(attribute_name, hidden_field_options.to_hash)}\n"
    return return_string.html_safe
  end

protected

  def default_data_option(hash, key, value)
    set_data_option(hash,key,value) unless data_option(hash, key)
  end

  def data_option(hash, key)
    hash[:data].try(:[],key) || hash["data-#{key}"]
  end

  def set_data_option(hash, key, value)
    hash[:data].try(:[]=,key,value) || (hash["data-#{key}"] = value)
  end

  def value(object)
    object.send @attribute_name if object
  end

  def format_date(value, format=nil)
    value.try(:strftime, I18n.t(format, scope: [ :date, :formats ], default: :default))
  end
end


Answer 4:

未成年人除了什么安德鲁黑客说:你的CoffeeScript也将要捕捉clearDate事件。

$ ->
  # convert bootstrap-datepicker value to rails date format (yyyy-mm-dd) on our hidden field
  $(document).on 'changeDate clearDate', '.bootstrap-datepicker', (evt) ->
    rails_date = if evt.date? then evt.date.getFullYear() + '-' + ('0' + (evt.date.getMonth() + 1)).slice(-2) + '-' + ('0' + evt.date.getDate()).slice(-2) else ''
    $(this).next("input[type=hidden]").val(rails_date)$(document).on 'changeDate clearDate', '.bootstrap-datepicker', (evt) ->`


文章来源: Bootstrap datepicker default value simple_form_for