
Scaffold で floor:references のように設定しました。
この references は「外部キー参照」といいます。
サンプルプログラムの場合、
まず Floor があって、
各Floor に複数の Cabinet が置かれています。
Cabinet が自分の所属している Floor を知っていると便利なので、
Cabinet に floor_id (= 自分が所属している Floor の ID) を格納しています。
floor_id に入っている値は単なる整数でしかないのですが、
Rails の定義段階で references を宣言すると、
2つのテーブルが連携して非常に使い勝手が良くなります。
具体的には、
cabinet = Cabinet.find(1) # ID:1 の Cabinet データを取得
floor = cabinet.floor # cabinet が属している floor データを取得
references で無い場合は、
cabinet = Cabinet.find(1)
floor = Floor.find(cabinet.floor_id) # cabinet の floor_id で Floor を取り出す
のように少し面倒なコードになってしまいます。
サンプルプログラムでは、
Step → Cabinet → floor と連携しているので、
floor = Step.find(1).cabinet.floor
のように、直感的に分かりやすいチェーンで書けます。
references で無い場合は、
floor = Floor.find(Cabinet.find(Step.find(1).cabinet_id).floor_id)
みたいになるでしょうか。
cabinet.floor のようにチェーンが使えるのは、
Cabinet モデルに
class Cabinet < ApplicationRecord
belongs_to :floor
# 他のコード
end
のように belongs_to :floor があるからで、
(Cabinet は floor に属している、です)
Scaffold が設定してくれています。

前節で Cabinet → floor の関係を見ましたが、
逆の floor → Cabinet はどうでしょう?
Scaffold では該当する設定はしていないので、
必要なら手で追加する必要があります。
具体的には、Floor モデル中、
class Floor < ApplicationRecord
has_many :cabinets
# 他のコード
end
のように has_many :cabinets と追記します。
(Floor は多くの cabinets を持っている、です)
こうしておけば、
@floor.cabinets で、
@floor に属している cabinet の一覧を取得できます。
こちらは、cabinets と複数形になっている事に注意してください。
@floor.cabinet だとエラーになります。
ちなみに、
1対1 や、多対多、など色々なパターンがありますので、
詳細が必要であれば、Rails ドキュメント を参照してください。