我的资源Company
有很多Projects
和People
。公司的index
操作会在表格中显示每个公司。 show
操作会显示一些有关它的其他信息,然后我要显示的是另一个表格,其中包含“项目”和“人物”标签。
当我点击“人物”标签时,我应该转到“公司/:id / people”网址,同样也可以转到“项目”标签。我并不担心AJAX或在@company
操作期间将所有这些信息预先加载到show
变量中。一个简单的嵌套资源就可以了。
现在,当我在“公司/:id / people”时,它将使用PeopleController#index
,但是我希望显示该视图(我认为它只是它的表格?)嵌套在公司的{ {1}}查看。因此,当我在“公司/:id / people”和“公司/:id / projects”之间切换时,唯一改变的是表格,而不是外围的公司信息。
这种事情很容易做到吗?如果没有构建Rails来轻松处理这类事情,我不介意使用别的东西。我对视图层没有太多经验,所以我对它的了解并不多,因为我主要使用JSON。
答案 0 :(得分: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 %>
答案 1 :(得分:0)
我建议您查看导轨指南,特别是routing from the outside in。
然而,rails可以处理此问题,您的路线将按以下方式设置:
resources :company do
resource :projects
resource :people
end
我假设您已经设置了所有CRUD操作,那么这将有效。但请注意,它会改变您的命名路线。
即
如果你打电话
projects_path
在您的观看中,它们现在将成为:
company_projects_path
您可以使用命令
查看完整的路线列表rake routes