Rails 3.2 - best_in_place - 编辑时的日期值格式问题

Posted

技术标签:

【中文标题】Rails 3.2 - best_in_place - 编辑时的日期值格式问题【英文标题】:Rails 3.2 - best_in_place - Date value format issue while editing 【发布时间】:2015-09-11 14:29:55 【问题描述】:

在我的 Rails 3.2 Web 应用程序中,我使用 best_in_place gem 创建了一个基本的简历模板。我对:date 类型有疑问。默认情况下,它以yyyy-mm-dd 格式显示日期,但在显示和编辑时我都需要mm/dd/yyyy 格式。为了更改显示格式,我在 best_in_place 中使用了帮助程序 display_as:,我可以看到格式已更改。

问题是当我点击值进行编辑时,它会再次回到旧格式(yyyy-mm-dd),请帮我解决这个问题。您可以在下面找到它的代码。

查看

<div id="resume_template">
    <div id="user_personal_info" class="sub_template" align="center">
        <div class="title_section"><b>PERSONAL PROFILE</b></div>
        <hr>
        <table >
            <tr>
                <td valign="middle"align="right" >NAME</td>
                <td valign="middle" class="colon_td">:</td>
                <td valign="middle"><%= get_user_content('name') %></td>
            </tr>
            <tr>
                <td valign="middle"align="right" >EMAIL</td>
                <td valign="middle" class="colon_td">:</td>
                <td valign="middle"><%= get_user_content('email') %></td>
            </tr>
            <tr>
                <td valign="middle"align="right" >DATE OF BIRTH</td>
                <td valign="middle" class="colon_td">:</td>
                <td valign="middle"><%= best_in_place @resume, :dob, url: resume_path(@resume), type: :date, display_as: :format_dob %></td>
            </tr>
            <tr>
                <td valign="middle"align="right" >GENDER</td>
                <td valign="middle" class="colon_td">:</td>
                <td valign="middle"><%= best_in_place @resume, :gender, type: :select, collection: [[0, 'Male'], [1, "Female"]], value: @resume.gender %></td>
            </tr>
            <tr>
                <td valign="middle"align="right" >MARITAL STATUS</td>
                <td valign="middle" class="colon_td">:</td>
                <td valign="middle"><%= best_in_place @resume, :marital_status, type: :select, collection: [[0, 'Single'], [1, "Married"]] %></td>
            </tr>
            <tr>
                <td valign="middle"align="right" >LINGUISTIC ABILITY</td>
                <td valign="middle" class="colon_td">:</td>
                <td valign="middle"><%= best_in_place @resume, :linguistic_ability %></td>
            </tr>
            <tr>
                <td valign="middle"align="right" >NATIONALITY</td>
                <td valign="middle" class="colon_td">:</td>
                <td valign="middle"><%= best_in_place @resume, :nationality %></td>
            </tr>
        </table>
    </div>

    <div id="user_education_info" class="sub_template" >
        <div class="title_section"><b>EDUCATIONAL BACK GROUND/QUALIFICATION</b></div>
        <hr>
        <%= best_in_place @resume, :educational_info, type: :textarea %>
    </div>

    <div id="user_prof_exp_info" class="sub_template" >
        <div class="title_section"><b>WORK EXPERIENCE</b></div>
        <hr>
        <%= best_in_place @resume, :work_experience_info, type: :textarea %>
    </div>

    <div id="user_certification_info" class="sub_template" >
        <div class="title_section"><b>CERTIFICATION</b></div>
        <hr>
        <%= best_in_place @resume, :certification_info, type: :textarea %>
    </div>
</div>

<script type="text/javascript">
    $( document ).ready( function ()
        // $.extend($.fn.datepicker.defaults,  format: 'mm/dd/yy' );
        /* $.datepicker.setDefaults(
            dateFormat: 'mm/dd/yy'
        );*/

        jQuery(".best_in_place").best_in_place();
    );
</script>

型号

class Resume < ActiveRecord::Base
  belongs_to :user
  attr_accessible :certification_info, :dob, :educational_info, :gender, :linguistic_ability, :marital_status, :nationality, :work_experience_info

  def format_dob
    self.dob.strftime("%m/%d/%Y")
  end
end

附上两张截图供参考。如果看不到,请下载并放大图片。感谢您的帮助:)

【问题讨论】:

【参考方案1】:

我找到了一个解决方案,但我不确定它是否符合 Rails 约定。

解决方案:

只需覆盖模型本身中的dob 字段值。这是简历模型。

class Resume < ActiveRecord::Base
  belongs_to :user
  attr_accessible :certification_info, :dob, :educational_info, :gender, :linguistic_ability, :marital_status, :nationality, :work_experience_info

  def dob
    if self.read_attribute(:dob)
        self.read_attribute(:dob).to_date.strftime("%m/%d/%Y")
    else
        self.read_attribute(:dob)
    end
  end
end

使用此解决方案,我们甚至不需要将 display_as 助手与 best_in_place 一起使用。它将在可编辑/非编辑模式下以mm/dd/yyyy 格式显示值。

【讨论】:

【参考方案2】:

尝试: $.datepicker.setDefaults( 日期格式:'dd-mm-yy' );

【讨论】:

【参考方案3】:

如果你想以默认格式打印日期,你需要配置初始化。 创建一个

初始化程序/date_format.rb

用这条线

Date::DATE_FORMATS[:default] = "%m/%d/%Y"

【讨论】:

以上是关于Rails 3.2 - best_in_place - 编辑时的日期值格式问题的主要内容,如果未能解决你的问题,请参考以下文章

Rails 4 - best_in_place:无法处理的实体

best_in_place 不是 Rails 3.2.1 中的函数错误

Rails 4 - best_in_place gem 和多对多关联

Rails - 带日期的 best_In_place gem

使用 Rails gem 'best_in_place' 进行内联编辑 - 错误:在 textarea 上编辑后新行丢失

在单击标签名称时 Rails best_in_place gem