5

Show と Deal の 2 つのモデルがあります。

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

PS主キーを取引テーブルに追加することでこの問題を解決しましたが、実際には必要ありません。したがって、質問はまだ現実的です。id 主キーのないモデルで依存関係を使用できますか?

4

2 に答える 2

3

複合キーによると、レールは複合主キーをサポートしていません(それはあなたの場合です)。したがって、解決策の1つは、has_and_belongs_to_manyテーブルが多対多テーブルのように見えるため、使用することです。

もう 1 つの解決策は、上記のリンクにある gem を使用することです。

于 2012-05-01T09:09:39.307 に答える
0

問題が解決すると確信していますが、https://github.com/rails/rails/commit/ccea98389abbf150b886c9f964b1def47f00f237:inverse_ofによると、パラメーターを特異値で設定する必要があります。

belongs_to :show, :inverse_of => :deal

役立つことを願っています

于 2012-04-30T13:16:19.363 に答える