我有两种模式:展示和交易。
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主键的模型中使用依赖吗?
答案 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
我希望它有所帮助