Проблема с композитным_primary_key Gem в Rails

Я использую гем составных первичных ключей от 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) я получу следующую ошибку :

ActiveRecord::StatementInvalid: PGError: ОШИБКА: нулевое значение в столбце "course_iddaily_order_id" нарушает ненулевое ограничение: ВСТАВЬТЕ В "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) ВОЗВРАТ "course_iddaily_order_id"

Я думаю, что курс_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

Я не знаю, что здесь не так, вы можете помочь?


person LeonS    schedule 01.03.2011    source источник


Ответы (1)


Я предполагаю, что метод create_table не принимает массив для опции :primary_key. Я думаю, вы можете не устанавливать его.

person dombesz    schedule 01.03.2011
comment
Я думаю, что гем Composite_primary_key должен реализовать именно эту функцию. - person LeonS; 03.03.2011