11

前提: 通常、新しい Ruby on Rails アプリの準備中に、ユーザー ナビゲーションに関するモデルと関係を描きます。通常、ネストの深さが 1 レベル以下であるという通常の「経験則」を超える必要があるかどうかを自問する必要がある場所に行き着きます。別の名前空間ルートを作成して作業を複製するのではなく、入れ子にする必要があると感じることがあります。
次に例を示します。

モデル:ユーザー、会社、場所
ユーザーは多くの会社を持ち、所属しています (多対多)
ユーザーは多くの場所を持ち、所属しています (多対多)
会社は多くの場所を持ち、所属しています (多対多)

ルート:
1 レベルの入れ子
users/:user_id/companies/ - ユーザーに関連するすべての会社を一覧表示します
users/:user_id/locations/ - ユーザーに関連するすべての場所を一覧表示します
2 つ以上のレベルで入れ子
users/:user_id/companies/:company_id/ location/ - ユーザーのすべての会社の場所を一覧表示します

それで、私の質問は、RoR で 1 レベル以上の深さを入れ子にすることが適切かどうかです。はい、もしくは、いいえ?なぜ?

4

3 に答える 3

7

私は Jamis Buck のアドバイスに従う傾向があり、1 レベル以上の深さにネストすることはありません。

編集:複数のレベルをネストする場合は、Edgeの新しい浅いルート機能を確認します

于 2008-10-02T22:11:16.733 に答える
2
users/:user_id/companies/:company_id/locations/

技術的にはこれで問題ありませんが、名前付きルート ヘルパーは

user_company_location_path( user_id, company_id, location_id )

そのような 3 つのパラメータをカートに入れなければならないのは面倒です。煩わしいものは、おそらく危険信号です。

于 2008-10-02T22:19:44.530 に答える
1

理論的には良さそうに思えますが、複数のレベルをネストすると混乱し始める可能性があることがわかりました。特に、異なるレベルで同じ名前のコントローラーがある場合 (これは非常に一般的です)。

例えば

  user/x/blog/y/profile/z, and
  user/x/profile/a

自分が働いていると思っている名前空間とは異なる名前空間で作業していることに気付くことがよくあります。同じようなことをしていても、違うことをしていると、かなり混乱する可能性があります =)

私の現在のアプリでは、先週行って、ネストされたルートのほとんどを削除しました。(もちろんYMMV)

于 2008-10-03T03:05:44.313 に答える