我使用单表继承如下:
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)