2011-03-01 55 views
0

我使用的是从drnic复合主键宝石和我有它的问题: 如果我想创建一个CourseOrder(与有CPK)用下面的命令我测试:course_order = CourseOrder.new(:daily_order => daily_orders(:daily_order_one_of_today_for_hans),:course => courses(:non_veg_2), :finished => false, :ordered_at => Time.now),我会收到以下错误:问题与Rails的composite_primary_key宝石

ActiveRecord::StatementInvalid: PGError: ERROR: null value in column "course_iddaily_order_id" violates not-null constraint : INSERT INTO "course_orders" ("course_iddaily_order_id", "course_id", "ordered_at", "finished", "daily_order_id") VALUES (NULL, 489519433, '2011-03-01 10:19:27.169397', 'f', 594369222) RETURNING "course_iddaily_order_id"

我认为有一个course_iddaily_order_id是错误的,不是吗?

我的移民文件看起来像这样:

class AddCourseOrder < ActiveRecord::Migration 
    def self.up 
    create_table :course_orders, :primary_key => [:course_id, :daily_order_id] do |table| 
     table.integer :course_id 
     table.integer :daily_order_id 
     table.datetime :ordered_at, :null => false 
     table.boolean :finished, :default => false, :null => false 
    end 
    end 

    def self.down 
    drop_table :course_orders 
    end 
end 

生成的模式部分看起来是这样的:

create_table "course_orders", :primary_key => "course_iddaily_order_id", :force => true do |t| 
    t.integer "course_id",       :null => false 
    t.integer "daily_order_id",     :null => false 
    t.datetime "ordered_at",      :null => false 
    t.boolean "finished",  :default => false, :null => false 
end 

我的模型看起来是这样的:

class CourseOrder < ActiveRecord::Base 
    set_primary_keys :course_id, :daily_order_id 
    belongs_to :course 
    belongs_to :daily_order 
end 

我不知道这里错了什么,你能帮忙吗?

回答

0

我猜create_table方法不需要一个数组:primary_key选项。我想你可以省略设置它。

+0

我认为“composite_primary_key”gem应该完全实现该功能。 – LeonS 2011-03-03 09:00:31