小编ell*_*ren的帖子

Rails3/jQuery UI Datepicker - 保存时反转月和日

(我的问题几乎和这个问题中描述的一样,只有答案在我的情况下不起作用.)


我在带有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中的日期存储方式做些什么?(它们被指定为日期,而不是日期时间.)

format postgresql date jquery-ui-datepicker ruby-on-rails-3

14
推荐指数
1
解决办法
4162
查看次数

使用Formtastic作为Rails3中habtm关联的复选框

我按照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

3
推荐指数
1
解决办法
2473
查看次数

RailsTutorial 3.2第11章 - PostgreSQL语法错误会破坏状态提要

我在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

2
推荐指数
1
解决办法
1248
查看次数