(我的问题几乎和这个问题中描述的一样,只有答案在我的情况下不起作用.)
我在带有Postgres数据库的Rails应用程序中使用jQuery UI Datepicker.默认实现使用mm/dd/yy日期格式来显示所选日期,这正是我想要的.但是,在将记录保存到数据库后,月份和日期相反 - 然后显示为yy-dd-mm.所以选择3/11/2012尝试保存为11月3日而不是3月11日,并且根本没有保存像2012年3月31日这样的日期,因为它不存在.
到目前为止,我已经走了三条不同的途径试图解决这个问题:
1)首次尝试重新格式化文本字段,以便显示我的想法:
<%= f.text_field :foo, :value => (@model.foo.blank? ? '' : @model.foo.strftime('%m/%d/%Y')), class: "datepicker" %>
Run Code Online (Sandbox Code Playgroud)
最初正确显示03/31/2012,但保存时仍然反转.
2)接下来我尝试更改存储日期的默认方式,认为可以解决问题.正如在这个问题的答案中所描述的,我在config/locales/en.yml中添加了以下内容:
# config/locales/en.yml
en:
date:
formats:
default: "%m/%d/%Y"
Run Code Online (Sandbox Code Playgroud)
这根本没有任何区别.接下来我发现了这个问题并尝试使用以下行创建config/initializers/date_formats.rb:
Date::DATE_FORMATS[:default]="%m/%d/%Y"
Time::DATE_FORMATS[:default]="%m/%d/%Y %H:%M"
Run Code Online (Sandbox Code Playgroud)
同上,没有区别.
3)在玩了很多组合之后,我发现DID工作的一件事是在我调用datepicker插件时指定了yyyy-mm-dd格式 - 它与我想要的相反,但至少日期可以是成功保存.所以datepicker调用如下所示:
$( ".datepicker" ).datepicker({ dateFormat: 'yy-mm-dd' });
Run Code Online (Sandbox Code Playgroud)
从日历中选择3月31日将使用2012-03-31填充该字段,并在保存后仍显示为2012-03-31.
但是我怎样才能让日期选择器以mm/dd/yy格式工作?我无法想象这是一件困难的事情,但我错过了什么?我是否必须对Postgres中的日期存储方式做些什么?(它们被指定为日期,而不是日期时间.)
我按照Railscast#17 HABTM Checkboxes(修订版)中的说明来获取此代码,以使用has_and_belongs_to_many关联向项目添加服务:
<% Service.all.each do |service| %>
<%= hidden_field_tag "project[service_ids][]", nil %>
<%= check_box_tag "project[service_ids][]", service.id, @project.service_ids.include?(service.id), id: dom_id(service) %>
<%= label_tag dom_id(service), service.name %><br />
<% end %>
Run Code Online (Sandbox Code Playgroud)
这是正常的,但我想使用Formtastic生成代码,以保持格式与页面的其余部分一致.视频提到Formtastic可以很容易地做到这一点,但我无法弄清楚我的生活代码.
我的猜测是做这样的事情:
<%= semantic_form_for :services do |f| %>
<%= f.input :name, :as => :check_boxes, :collection => Service.find(:all) %>
<% end %>
Run Code Online (Sandbox Code Playgroud)
并生成服务列表,但选中框不会做任何事情.我知道最后一点代码需要以某种方式链接到projects_services关联,但我不知道如何做到这一点.
forms checkbox ruby-on-rails has-and-belongs-to-many formtastic
我在Rails教程的第11.3.1节中,所有测试都在此之前通过.之后,主页(具有微博提要)中断了此错误:
PG::Error: ERROR: invalid input syntax for integer: "98, 1"
LINE 1: ...CT COUNT(*) FROM "microposts" WHERE (user_id IN ('98, 1') O...
^
: SELECT COUNT(*) FROM "microposts" WHERE (user_id IN ('98, 1') OR user_id = 101)
Run Code Online (Sandbox Code Playgroud)
并且有几个测试因类似问题而失败.这是第一个:
1) Authentication authorization as wrong user visiting Users#edit page
Failure/Error: before { visit edit_user_path(wrong_user) }
ActionView::Template::Error:
PG::Error: ERROR: invalid input syntax for integer: ""
LINE 1: ...CT COUNT(*) FROM "microposts" WHERE (user_id IN ('') OR use...
^
Run Code Online (Sandbox Code Playgroud)
现在,我正在使用PostgreSQL而不是默认的SQLite3,因此可能存在语法冲突,但我并不积极.我对Postgres并不是很熟悉(只是使用它来使Heroku部署更清洁).
看起来主页错误来自使用引号传递给查询的ID - …
postgresql syntax ruby-on-rails ruby-on-rails-3 railstutorial.org