1

has_many関係を持つ2つのオブジェクト(@stacksと@stories)があります(@anthologiesを介して)。ストーリーは、個別に表示することも(/ stories / 1 /)、スタック内のコレクションとして表示することもできます(/ stacks / 1 / stories / 1 /)。

map.resources :stories
map.resources :anthologies
map.resources :stacks, :has_many => :stories do |stack|
  stack.resources :stories
end  

この基本的なフレームが機能しているので、ストーリーがスタックの一部としてレンダリングされるタイミングを特定して、ストーリー間のナビゲーションを構築できるようにしています。これを行う最も簡単な方法は、プライマリコントローラーのURLを確認することだと思いますが、1)これを行う方法がわかりません。また、2)より直接的な方法があるはずなので、非常に不安定なようです。

ここでも、Railsの基本のいくつかについて頭を悩ませています。目的の機能を実現するための推奨事項はありますか?

4

2 に答える 2

3

のネストされたルートとネストされていないルートの両方を定義しました:stories。StoriesControllerがこれらのパラメーターを含むリクエストを受信したとき:

/stacks/1/stories # nested form

またはこれらで

/stories # non-nested form

ルートはにマップされ{:controller => :stories, :action => :index }ます。ネストされた形式では、paramsハッシュに。が含まれます:stack_id => 1。ネストされていない形式では、ネストされません。

于 2010-10-30T20:44:43.813 に答える
1

子リソースにアクセスしている場合、パラメータにはデフォルトで親リソースが含まれます。

たとえば、「/ stacks / 1 / stories / 2 /」は、次のようなparams構造になります。

{:action => 'show', :controller => 'stories', :stack_id => 1, :id => 2 }

コントローラでネストされたリソースを検索する場合は、paramsハッシュでparent_idが存在するかどうかを確認してください。例:

before_filter :find_stack

protected
def find_stack
  if params[:stack_id]
     Stack.find(params[:stack_id])
  end
end
于 2010-10-30T20:43:57.670 に答える