PG:: Error: ERROR: null значение в столбце "created at" при вставке записей в связанную модель

у меня есть Job модель Category модель, к которой я присоединился, используя ассоциацию HABTM.

Я получаю ошибку при попытке назначить Categories_Jobs модель.

PG::Error: ERROR: null value in column "created_at" violates not-null constraint

j = Job.first
Job Load (0.7ms)  SELECT "jobs".* FROM "jobs" LIMIT 1
=> #<Job id: 7, user_id ...(removed rest of details for sake of clarity)

j.categories
Category Load (0.8ms)  SELECT "categories".* FROM "categories" INNER JOIN "categories_jobs" ON "categories"."id" = "categories_jobs"."category_id" WHERE "categories_jobs"."job_id" = 7
=> [] 

j.category_ids = [1]
Category Load (6.1ms)  SELECT "categories".* FROM "categories" WHERE "categories"."id" =    LIMIT 1  [["id", 1]]
(0.2ms)  BEGIN
(0.6ms)  INSERT INTO "categories_jobs" ("job_id", "category_id") VALUES (7, 1)
(0.1ms)  ROLLBACK
ActiveRecord::StatementInvalid: PG::Error: ERROR:  null value in column "created_at" violates not-null constraint

должен ли я удалить метки времени из моего Categories_Jobs модель?

class CreateCategoriesJobs < ActiveRecord::Migration
  def change
    create_table :categories_jobs, :id => false do |t|
      t.integer :category_id
      t.integer :job_id
      t.timestamps
    end
  end
end

должен ли я делать это по-другому?

3 ответов


см. ниже ссылку на ваше решение.

HABTM

решение

удалить t.timestamps и затем запустить.

class CreateCategoriesJobs < ActiveRecord::Migration
  def change
    create_table :categories_jobs, :id => false do |t|
      t.integer :category_id
      t.integer :job_id
    end
  end
end

просто используйте другой тип многие-ко-многим связи.

class Category ...

  has_many :categories_jobs
  has_many :categories, through: :categories_jobs

  ...
end

class Job ...

  has_many :categories_jobs
  has_many :jobs, through: :categories_jobs

  ...
end

тогда вы сможете использовать метки времени.


мой ответ не совсем отвечает на вопрос OP, но этот пост появляется при поиске сообщения об ошибке, поэтому я все равно отвечаю.

у меня есть has_many отношения. Предположим, мы используем Parent модель, и родитель has_many :child_models.

когда я называю

@parent.child_models.create(params)

затем Postgres жалуется на значения null. Но если я разделю его, все будет хорошо:

@child = @parent_object.child_models.build
@child.save

другим решением было вынуть NOT NULL ограничения. В таком случае create возвращает без ошибок, и когда я смотрю на запись позднее время устанавливаются. Сначала ActiveRecord должен сохранять запись без временных меток, а затем возвращаться и вставлять их. (Рельсы 4.2.5)