Ruby on rails 在Postgres上使用Rails的Datetime字段
我正在使用Rails与Postgres制作一个日程安排应用程序。我有一个带有两个timedate列的模型班次,start_at和end_at。创建它的迁移过程如下所示:Ruby on rails 在Postgres上使用Rails的Datetime字段,ruby-on-rails,postgresql,activerecord,rails-postgresql,Ruby On Rails,Postgresql,Activerecord,Rails Postgresql,我正在使用Rails与Postgres制作一个日程安排应用程序。我有一个带有两个timedate列的模型班次,start_at和end_at。创建它的迁移过程如下所示: class CreateShifts < ActiveRecord::Migration def change create_table :shifts do |t| t.references :user t.references :schedule t.datetime :
class CreateShifts < ActiveRecord::Migration
def change
create_table :shifts do |t|
t.references :user
t.references :schedule
t.datetime :start_at
t.datetime :end_at
t.string :position
t.string :notes
t.timestamps
end
add_index :shifts, :user_id
add_index :shifts, :schedule_id
end
end
我在DB保存之前创建了一个有效的DateTime对象,因为我使用了记录器来显示它,并且它是正确的。参数如下所示:
{"utf8"=>"✓",
"authenticity_token"=>"qornHMTAdikZJP/sByPIg//fFuYHHAQH3M/0R9XnP+o=",
"shift"=>{"user_id"=>"1",
"start_at(1i)"=>"2011",
"start_at(2i)"=>"11",
"start_at(3i)"=>"14",
"start_at(4i)"=>"00",
"start_at(5i)"=>"01",
"end_at(1i)"=>"2011",
"end_at(2i)"=>"11",
"end_at(3i)"=>"14",
"end_at(4i)"=>"00",
"end_at(5i)"=>"02",
"position"=>"",
"notes"=>""},
"schedule_id"=>"1"}
但是,我可以通过控制台将两个字段都设置为时间来创建记录。现在。错误消息非常清楚:
INSERT
语句中的$2
是time
类型,而不是timestamp
(datetime)类型
插入“班次”
(“创建时间”、“结束时间”、“备注”、“职位”、“计划id”、“开始时间”、“更新时间”、“用户id”)
返回“id”的值($1、$2、$3、$4、$5、$6、$7、$8)
我的。
您一定是混淆了参数,$2
显然不是您在发布结束时显示的参数。或者您在分配前无意中将其强制转换为时间。您分配$2
的部分在问题中不可见,这很可能是问题发生的地方
可能是你的问题中的某种打字错误,你提到的是
timedate
,而不是datetime
?实际上我只需要重新启动Thin。即使在开发模式下,将col从time
更改为datetime
的迁移也没有生效,因此它试图将time
保存到字段中。这里也存在同样的问题-我只需重新启动rails服务器-不确定您为什么接受Erwin的答案-答案似乎是您重新启动服务器的注释。
{"utf8"=>"✓",
"authenticity_token"=>"qornHMTAdikZJP/sByPIg//fFuYHHAQH3M/0R9XnP+o=",
"shift"=>{"user_id"=>"1",
"start_at(1i)"=>"2011",
"start_at(2i)"=>"11",
"start_at(3i)"=>"14",
"start_at(4i)"=>"00",
"start_at(5i)"=>"01",
"end_at(1i)"=>"2011",
"end_at(2i)"=>"11",
"end_at(3i)"=>"14",
"end_at(4i)"=>"00",
"end_at(5i)"=>"02",
"position"=>"",
"notes"=>""},
"schedule_id"=>"1"}