Поле Datetime с использованием Rails на Postgres - PullRequest
1 голос
/ 13 ноября 2011

Я использую Rails, чтобы создать приложение для планирования с Postgres. У меня есть модель Shift с двумя временными столбцами, start_at и end_at. Миграция для ее создания выглядит следующим образом:

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

Когда я пытаюсь создать запись, я получаю следующую ошибку 500:

GError: ERROR:  column "end_at" is of type timestamp without time zone but expression is of type time without time zone at character 132
HINT:  You will need to rewrite or cast the expression.
: INSERT INTO "shifts" ("created_at", "end_at", "notes", "position", "schedule_id", "start_at", "updated_at", "user_id") VALUES ($1, $2, $3, $4, $5, $6, $7, $8) RETURNING "id"

Я создаю действительный объект 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"}

Однако я могу создать запись через консоль, установив для обоих полей значение Time.now.

1 Ответ

2 голосов
/ 14 ноября 2011

Сообщение об ошибке совершенно ясно: ваш $2 в операторе INSERT имеет тип time вместо типа timestamp (datetime)

INSERT INTO "shifts"

(«create_at», « end_at », «notes», «position», «schedule_id», «start_at», «updated_at», «user_id»)

ЗНАЧЕНИЯ ($ 1, $ 2 , $ 3, $ 4, $ 5, $ 6, $ 7, $ 8) ВОЗВРАЩАЕТСЯ "id"

Акцент мой.Вы, должно быть, смешиваете параметры, $2 явно не тот, который вы отображаете в конце публикации.Или вы по неосторожности применили его ко времени перед назначением.Часть, в которой вы назначаете $2, не видна в вопросе, скорее всего, там возникает проблема.

Может быть, какая-то опечатка, как в вашем вопросе, где вы упоминаете timedate вместо datetime

...