PG ::错误:错误:将记录插入关联模型时,"created_at"列中的空值

Rob*_*t B 11 ruby-on-rails-3

我有一个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" =   $1 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
Run Code Online (Sandbox Code Playgroud)

我应该从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
Run Code Online (Sandbox Code Playgroud)

我应该这样做吗?

Dip*_*hal 8

请参阅下面的解决方案链接.

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
Run Code Online (Sandbox Code Playgroud)

  • 为什么我们不必使用t.timestamps? (2认同)

Nic*_*nko 6

只需使用另一种多对多关系声明.

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
Run Code Online (Sandbox Code Playgroud)

那么你将能够使用时间戳.