2

CompanyとがたくさんあるリソースがProjectsありPeopleます。会社のindexアクションでは、各会社がテーブルに表示されます。showアクションには、それに関するいくつかの追加情報が表示されます。次に、[プロジェクト]タブと[人]タブのある別のテーブルを表示します。

[People]タブをクリックすると、URL "companies /:id / people"に移動し、同様に[Projects]タブに移動する必要があります。@companyアクション中にAJAXや、このすべての情報を変数にプリロードすることについては心配していませんshow。単純なネストされたリソースで問題ありません。

今、私が「companies /:id / people」にいるときは、を使用しPeopleController#indexますが、会社のビュー内にネストされたそのビュー(これは単なるテーブルだと思いますか?)を表示したいと思いますshow。そのため、「companies /:id /people」と「companies/:id / projects」を切り替えると、変更されるのはテーブルだけであり、外部の会社情報ではありません。

この種のことは簡単に実行できますか?Railsがこの種のことを簡単に処理できるように構築されていない場合は、他のものを使用してもかまいません。私はビューレイヤーの経験があまりないので、主にJSONを使用しているので、ビューレイヤーについてはあまり知りません。

4

2 に答える 2

2

基本的な例:

ProjectsController && PeopleController:

layout :current_layout

def current_layout
  if @company && @company.persisted? && request.path_parameters[:action] == "index" # i prefer helper 'current_action'
    "company"
  else
    "application"
  end
end

ヘルパー:

def parent_layout(layout)
  @view_flow.set(:layout, self.output_buffer)
  self.output_buffer = render(:file => "layouts/#{layout}")
end

会社のレイアウト:

#views/layouts/company.html.erb

<h1><%= @company %></h1>
<ul class="tabs">
 <li>Info</li>
 <li>Info</li>
 <li>Info</li>
</ul>
<%= yield %>
<%= parent_layout(:application) %>

ピープルテンプレート:

# views/people/index.html.erb

<% if current_layout == "company" %> # just table
  <%= render "people_table" %>
<% else %>
  <h1>People controller</h3>
  <%= render @people %>
<% end %>

プロジェクトテンプレート:

# views/projects/index.html.erb

<% if current_layout == "company" %> # just table
  <%= render "projects_table" %>
<% else %>
  <h1>Projects controller</h3>
  <%= render @projects %>
<% end %>
于 2013-01-05T21:17:12.787 に答える
0

レールガイド、具体的にはの外側からのルーティングを確認することをお勧めします。

レールはこれを処理できますが、ルートは次のように設定されます。

resources :company do
       resource :projects
       resource :people
end

すでにすべてのCRUDアクションが設定されていると思いますが、これでうまくいきます。ただし、名前付きルートが変更されることに注意してください。

すなわち

あなたが呼んでいたなら

projects_path

あなたの見解では、それらは次のようになります:

company_projects_path

コマンドでルートの完全なリストを見ることができます

rake routes
于 2013-01-05T19:53:24.193 に答える