has_many,通过协会Rails

时间:2018-05-12 01:14:42

标签: ruby-on-rails postgresql

您好我需要帮助为我的数据库创建一个结构(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

2 个答案:

答案 0 :(得分:1)

起点是什么?如果您有公寓,可以flat.roomsRoom.where(flat: flat)Room.where(flat_id: id)。如果您有建筑物,如果您有Building.find(1).rooms,则可以has_many :rooms, through: :flats

答案 1 :(得分:1)

你的协会可以做你要求的事情。
如果您想获得特定公寓的房间,如果您已经设置了名为 flat 的变量,则可以执行:Flat.find(id).roomsflat.rooms

编辑:由于声誉限制,我无法回复评论,所以我在这里回复。

  

感谢。另一个问题。如何查询以了解建筑物中的房间和单位数量

您可以通过在请求中添加.count方法来实现。与flat.rooms.countbuilding.flats.count一样。