单表继承和has_many_and_belongs_to

时间:2017-09-16 22:06:00

标签: ruby-on-rails single-table-inheritance ruby-on-rails-5

我使用单表继承如下:

class Reservation < ApplicationRecord
end

class Stay < Reservation
end

现在我有另一个叫做房间的课程,我希望它与住宿有多对多的关系,因为预订更为一般。此外,我不需要关联模型,所以我想使用has_many_and_belongs来。所以我创建了stay_rooms表:

class CreateStayRooms < ActiveRecord::Migration[5.1]
  def change
    create_table :stay_rooms, id: false do |t|
      t.references :reservation, foreign_key: true, index: true
      t.references :room, foreign_key: true, index: true
    end
  end
end

并准备好模型:

class Stay < Reservation
  has_and_belongs_to_many :rooms,
    join_table: :stay_rooms
end

class Room < ApplicationRecord
  has_and_belongs_to_many :stays, 
    class_name: 'Stay', 
    join_table: :stay_rooms
end

但它不起作用我继续得到&#34; ActiveRecord :: StatementInvalid:SQLite3 :: SQLException:没有这样的列:stay_rooms.stay_id&#34;当我尝试简单查询时:Stay.first.rooms。 所以我检查了文档并添加了foreign_key和association_key,如下所示:

class Stay < Reservation
  has_and_belongs_to_many :rooms,
    foreign_key: 'room_id',  
    association_foreign_key: 'room_id',
    join_table: :stay_rooms
end

class Room < ApplicationRecord
  has_and_belongs_to_many :stays, 
    class_name: 'Stay', 
    foreign_key: 'reservation_id', 
    association_foreign_key: 'reservation_id',
    join_table: :stay_rooms
end

但它仍然没有成功,我也不知道如何解决它。

更新

我有一个拼写错误我错误的外键,纠正后它只有一种方式有效。我可以得到与住宿相关的房间,但是当我这样做时,另一种方式给我一个空的收藏,尽管我有一个与住宿相关的房间。 (我做了Stay.first.rooms&lt;&lt; Room.first)

0 个答案:

没有答案