您好我需要帮助为我的数据库创建一个结构(PostgreSQL)
我想创建一个集合(查询),可以获得建筑物特定楼层的所有房间。
biulding.find(1).flats.find(1).rooms.
如何构建我的关联以存档?
谢谢
以下是模型
class Building < ApplicationRecord
has_many :flats
has_many :rooms, through: :flat
end
class Flat < ApplicationRecord
belongs_to :building
has_many :rooms
end
class Room < ApplicationRecord
belongs_to :flat
belongs_to :building
end
create_table "buildings", force: :cascade do |t|
t.string "name"
.....
end
------------------
create_table "flats", force: :cascade do |t|
t.string "number"
t.bigint "building_id"
t.bigint "room_id"
t.index ["building_id"], name: "index_flats_on_building_id"
t.index ["room_id"], name: "index_flats_on_room_id"
end
-------------------------------
create_table "rooms", force: :cascade do |t|
t.string "number"
t.bigint "flat_id"
t.bigint "building_id"
t.index ["building_id"], name: "index_rooms_on_building_id"
t.index ["flat_id"], name: "index_rooms_on_flat_id"
end
答案 0 :(得分:1)
起点是什么?如果您有公寓,可以flat.rooms
或Room.where(flat: flat)
或Room.where(flat_id: id)
。如果您有建筑物,如果您有Building.find(1).rooms
,则可以has_many :rooms, through: :flats
。
答案 1 :(得分:1)
你的协会可以做你要求的事情。
如果您想获得特定公寓的房间,如果您已经设置了名为 flat 的变量,则可以执行:Flat.find(id).rooms
或flat.rooms
。
编辑:由于声誉限制,我无法回复评论,所以我在这里回复。
感谢。另一个问题。如何查询以了解建筑物中的房间和单位数量
您可以通过在请求中添加.count
方法来实现。与flat.rooms.count
或building.flats.count
一样。