0
resources :books do 
    resources :chapters
end

上記の適切にネストされたリソースがあると仮定しましょう。親の本のリソースを作成するページと、章のリソースを作成する別のページを作成したいと思います。チャプターを作成するとき、ユーザーが作成した親の本を選択できるようにしたいと思います。

今私は...

protected
def find_book
    @book = Book.find(params[:book_id])
end

...チャプターコントローラー内ですが、これはURLにブックIDが既に存在する場合にのみ機能すると思います。したがって、新しいチャプターを作成するには、別のページでチャプターを作成できるようにする場合は、「rootpath / book / book_id / chapter/new」にアクセスする必要があります。

問題への取り組み方はよくわかりませんが、今のところ、ネストされたリソースをリンクするチャプター作成ページに関連付け(?)フォームを配置する予定です。

問題は、私はWeb開発に本当に慣れていないので、これにまったく近づいているかどうかわからないということです。:book_idをチャプターコントローラーに送信するフォームをどのように配置しますか?この方法はまったく機能しますか?それを行うためのより効率的な方法はありますか?

私の質問は少し曖昧かもしれませんが、どんな助けでも大歓迎です!

4

1 に答える 1

1

鈍い答えは次のとおりです。あなたの提案は、ネストされたルートだけでは意味がありません。

ネストされたルートは、chapters#newアクションにアクセスすると、その章を含める必要がある本がすでに正確にわかっていることを意味します。

ただし、明るい面としては、ネストされたルートとネストされていないルートの両方を同時に使用できます。

ネストされたルートを保持するだけでなく、ユーザーがチャプターに目的のブックを選択できるアクションを提供する場合は、チャプター作成用にネストされていないルートを追加できますnewcreate

例えば:

resources :books do
  resources :chapters
end
resources :chapters

デュアルルートに対応するために、コントローラーを少し書き直す必要がある場合があることに注意してください。

必要に応じて、同じページに両方のリソースを作成できます。それをするために見上げてくださいaccepts_nested_attributes_for。一度コツをつかめば、それは本当に簡単です。

于 2013-02-23T22:36:16.967 に答える