在销毁对象时清空列名

时间:2012-04-30 12:48:43

标签: ruby-on-rails postgresql

我有两种模式:展示和交易。

class Show < ActiveRecord::Base
  has_many :deals, :inverse_of => :show, :dependent => :destroy
  ...

class Deal < ActiveRecord::Base
  belongs_to :show, :inverse_of => :deals
  ...

当我试图销毁Show时出现此错误:

PG::Error: ERROR:  zero-length delimited identifier at or near """"
LINE 1: DELETE FROM "deals" WHERE "deals"."" = $1

为什么列名称为空?在schema.rb中:

create_table "deals", :id => false, :force => true do |t|
  t.integer "discount_id"
  t.integer "show_id"
end

create_table "shows", :force => true do |t|
  t.integer  "movie_id"
  t.integer  "hall_id"
  t.datetime "show_time"
  t.integer  "city_id"
  t.integer  "price"
end

外键添加到数据库

CONSTRAINT fk_deals_shows FOREIGN KEY (show_id)
  REFERENCES shows (id) MATCH SIMPLE
  ON UPDATE NO ACTION ON DELETE NO ACTION

P.S。我通过向交易表添加主键解决了这个问题,但我并不需要它。所以问题仍然存在。我可以在没有id主键的模型中使用依赖吗?

2 个答案:

答案 0 :(得分:3)

根据compositekeys rails,不支持复合主键(这是您的情况)。因此,其中一个解决方案是使用has_and_belongs_to_many,因为您的表似乎只是多对多表。

另一种解决方案是使用位于上面链接上的gem。

答案 1 :(得分:0)

我注意到它确定它会解决您的问题,但根据https://github.com/rails/rails/commit/ccea98389abbf150b886c9f964b1def47f00f237,您需要设置:inverse_of param的奇异值:

belongs_to :show, :inverse_of => :deal

我希望它有所帮助