0

したがって、私の Rails アプリには、ユーザーに属する 2 つのリソース (レンタルと予約) があります。これは、ネストされたルートを設定するための routes.rb のコードです。

  map.resources :users, :has_many => :reservations, :shallow => true
  map.resources :users, :has_many => :rentals, :shallow => true
  map.resources :rentals, :only => [:index]
  map.resources :reservations, :only => [:index]

これを行うためのより好ましい方法はありますか。グーグルで調べましたが、明確な答えが見つかりません。

前もって感謝します。

-光線

4

3 に答える 3

6

を実行するとわかるように、メソッドはユーザーのルートを複製しますrake routes。ブロックをに渡すことで修正できますmap.resources

map.resources :users, :shallow => true do |user|
  user.resources :reservations
  user.resources :rentals
end

作成されたネストされたルートは、これらのリソースに常にネストされた方法でアクセスすることを前提としています。

定義したすべてのルート (ネストされていないレンタルと予約インデックスを含む) が本当に必要な場合は、次を追加する必要があります。

map.resources :rentals, :only => [:index]
map.resources :reservations, :only => [:index]

そして、それを行うDRYerの方法を知りません。

于 2009-11-13T02:43:59.733 に答える
1

ブロックでネストされたルートを定義できます

map.resources :users, :shallow => true do |user|
  user.resources :reservations, :only => [:index]
  user.resources :rentals, :only => [:index]
end

この方法はもう少し明確で、後でネストされたリソースの 1 つに追加のオプションが必要になったときに、より簡単に調整できると思います。

さまざまなオプションと詳細は、ActionController リソース API ページにあります。

于 2009-11-13T02:05:43.820 に答える
1

ユーザーの下に 2 つのリソースをネストします。

  map.resources :users, :shallow => true do |users|
    users.resources :reservations, :only => :index
    users.resources :rentals, :only => :index
  end

編集:申し訳ありませんが、 :shallow オプションを忘れました。

于 2009-11-13T02:07:26.747 に答える