Rails 3.2 - best_in_place - 编辑时出现日期值格式问题
Rails 3.2 - best_in_place - Date value format issue while editing
在我的 Rails 3.2 网络应用程序中,我使用 best_in_place
gem 创建了一个基本的简历模板。我对类型 :date
有疑问。默认情况下它以 yyyy-mm-dd
格式显示日期,但我在显示和编辑时都需要 mm/dd/yyyy
格式。为了更改显示格式,我在 best_in_place 中使用了一个助手 display_as:
,我可以看到格式已更改。
问题是当我点击数值进行编辑时,它又会回到原来的格式(yyyy-mm-dd),请帮我解决这个问题。您可以在下面找到它的代码。
View
<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 width="100%">
<tr>
<td valign="middle"align="right" width="35%">NAME</td>
<td valign="middle"width="10%" class="colon_td">:</td>
<td valign="middle"width="55%"><%= get_user_content('name') %></td>
</tr>
<tr>
<td valign="middle"align="right" width="35%">EMAIL</td>
<td valign="middle"width="10%" class="colon_td">:</td>
<td valign="middle"width="55%"><%= get_user_content('email') %></td>
</tr>
<tr>
<td valign="middle"align="right" width="35%">DATE OF BIRTH</td>
<td valign="middle"width="10%" class="colon_td">:</td>
<td valign="middle"width="55%"><%= best_in_place @resume, :dob, url: resume_path(@resume), type: :date, display_as: :format_dob %></td>
</tr>
<tr>
<td valign="middle"align="right" width="35%">GENDER</td>
<td valign="middle"width="10%" class="colon_td">:</td>
<td valign="middle"width="55%"><%= best_in_place @resume, :gender, type: :select, collection: [[0, 'Male'], [1, "Female"]], value: @resume.gender %></td>
</tr>
<tr>
<td valign="middle"align="right" width="35%">MARITAL STATUS</td>
<td valign="middle"width="10%" class="colon_td">:</td>
<td valign="middle"width="55%"><%= best_in_place @resume, :marital_status, type: :select, collection: [[0, 'Single'], [1, "Married"]] %></td>
</tr>
<tr>
<td valign="middle"align="right" width="35%">LINGUISTIC ABILITY</td>
<td valign="middle"width="10%" class="colon_td">:</td>
<td valign="middle"width="55%"><%= best_in_place @resume, :linguistic_ability %></td>
</tr>
<tr>
<td valign="middle"align="right" width="35%">NATIONALITY</td>
<td valign="middle"width="10%" class="colon_td">:</td>
<td valign="middle"width="55%"><%= 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>
Model
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
附上两张截图供参考。如果看不到,请下载并缩放图片。感谢您的帮助:)
我找到了解决方案,但我不确定根据 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
格式显示值。
尝试:
$.datepicker.setDefaults({
日期格式:'dd-mm-yy'
});
如果您想以默认格式打印日期,您需要配置初始化。
创建
initializers/date_format.rb
用这条线
Date::DATE_FORMATS[:default] = "%m/%d/%Y"
在我的 Rails 3.2 网络应用程序中,我使用 best_in_place
gem 创建了一个基本的简历模板。我对类型 :date
有疑问。默认情况下它以 yyyy-mm-dd
格式显示日期,但我在显示和编辑时都需要 mm/dd/yyyy
格式。为了更改显示格式,我在 best_in_place 中使用了一个助手 display_as:
,我可以看到格式已更改。
问题是当我点击数值进行编辑时,它又会回到原来的格式(yyyy-mm-dd),请帮我解决这个问题。您可以在下面找到它的代码。
View
<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 width="100%">
<tr>
<td valign="middle"align="right" width="35%">NAME</td>
<td valign="middle"width="10%" class="colon_td">:</td>
<td valign="middle"width="55%"><%= get_user_content('name') %></td>
</tr>
<tr>
<td valign="middle"align="right" width="35%">EMAIL</td>
<td valign="middle"width="10%" class="colon_td">:</td>
<td valign="middle"width="55%"><%= get_user_content('email') %></td>
</tr>
<tr>
<td valign="middle"align="right" width="35%">DATE OF BIRTH</td>
<td valign="middle"width="10%" class="colon_td">:</td>
<td valign="middle"width="55%"><%= best_in_place @resume, :dob, url: resume_path(@resume), type: :date, display_as: :format_dob %></td>
</tr>
<tr>
<td valign="middle"align="right" width="35%">GENDER</td>
<td valign="middle"width="10%" class="colon_td">:</td>
<td valign="middle"width="55%"><%= best_in_place @resume, :gender, type: :select, collection: [[0, 'Male'], [1, "Female"]], value: @resume.gender %></td>
</tr>
<tr>
<td valign="middle"align="right" width="35%">MARITAL STATUS</td>
<td valign="middle"width="10%" class="colon_td">:</td>
<td valign="middle"width="55%"><%= best_in_place @resume, :marital_status, type: :select, collection: [[0, 'Single'], [1, "Married"]] %></td>
</tr>
<tr>
<td valign="middle"align="right" width="35%">LINGUISTIC ABILITY</td>
<td valign="middle"width="10%" class="colon_td">:</td>
<td valign="middle"width="55%"><%= best_in_place @resume, :linguistic_ability %></td>
</tr>
<tr>
<td valign="middle"align="right" width="35%">NATIONALITY</td>
<td valign="middle"width="10%" class="colon_td">:</td>
<td valign="middle"width="55%"><%= 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>
Model
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
附上两张截图供参考。如果看不到,请下载并缩放图片。感谢您的帮助:)
我找到了解决方案,但我不确定根据 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
格式显示值。
尝试:
$.datepicker.setDefaults({
日期格式:'dd-mm-yy'
});
如果您想以默认格式打印日期,您需要配置初始化。 创建
initializers/date_format.rb
用这条线
Date::DATE_FORMATS[:default] = "%m/%d/%Y"