【问题标题】:simple_form input_html not grabbing date when editing object编辑对象时simple_form input_html没有抓取日期
【发布时间】:2012-05-01 16:12:01
【问题描述】:

我已经为锻炼计划程序设置了一个表单。我使用 show_date 以用户友好的方式格式化日期,并使用实际日期字段来存储对 Rails 友好的日期。当我查看页面时,我在 show_date 字段中看不到任何内容,但 date 仍按预期工作。

#workout.rb
class Workout < ActiveRecord::Base
  validates_presence_of :name
  validates_presence_of :show_date
  validates_presence_of :time

  attr_accessor :show_date
end

#_form.html.erb
<%= simple_form_for @workout, :html => { :class => 'form-horizontal' } do |f| %>
  <%= f.input :name %>
  <%= f.input :date, :as => :hidden%>
  <%= f.input :show_date, :as => :date_picker, :label => 'Date', :input_html => { :value => @workout.date } %>
    <%= f.input :time, :minute_step => 15 %>
    <div class="form-actions">
    <%= f.button :submit, :class => 'btn-primary' %>
    <%= link_to t('.cancel', :default => t("helpers.links.cancel")),
                workouts_path, :class => 'btn' %>
  </div>
<% end %>

#date_picker_input.rb
class DatePickerInput < SimpleForm::Inputs::Base
  def input
    @builder.text_field(attribute_name, :class => 'date_picker')
  end    
end

#datepicker.js
$("input.date_picker").datepicker(
    {
        dateFormat: "mm/dd/yy",
        altField: "#workout_date",
        altFormat: "dd/mm/yy"
    }
);

【问题讨论】:

  • show_date 是数据库中的实际列还是只是一个虚拟属性?如果它只是一个虚拟属性,那么它不会持久化,下次获取对象时会为零。
  • 是的,它是一个虚拟属性。你描述的是我需要帮助的确切问题

标签: ruby-on-rails-3 date activerecord simple-form


【解决方案1】:

我把它放在这里而不是在 cmets 中,以便其他人更容易看到。

您已经在日期字段中拥有日期对象,您只需更改它向用户呈现的方式,并使用您应该使用的方法来做到这一点。

我会将 show_date 更改为使用 strftime 正确格式化查看日期的方法。 date.strftime("%m/%d/%Y") 会给你一个格式化为月/日/满年的字符串,即“05/01/2012”。 http://www.ruby-doc.org/core-1.9.3/Time.html#method-i-strftime 有不同格式字符串的文档。

def show_date
  date.strftime("%m/%d/%Y")
end

【讨论】:

    猜你喜欢
    • 2015-01-18
    • 1970-01-01
    • 2017-02-19
    • 1970-01-01
    • 1970-01-01
    • 2021-07-11
    • 1970-01-01
    • 2016-06-28
    • 1970-01-01
    相关资源
    最近更新 更多