Ruby on rails 如何设置在Rails的父资源中显示为选项卡的嵌套资源的视图?

Ruby on rails 如何设置在Rails的父资源中显示为选项卡的嵌套资源的视图?,ruby-on-rails,ruby-on-rails-3,nested-resources,Ruby On Rails,Ruby On Rails 3,Nested Resources,我有一个资源公司,它有许多项目和人员。公司的索引操作在表中显示每个公司。show操作显示了一些关于它的附加信息,然后我想显示的是另一个表,带有选项卡“Projects”和“People” 当我点击“人员”选项卡时,我应该转到URL“companys/:id/People”,同样,我也应该点击“Projects”选项卡。我不担心AJAX或在show操作期间将所有这些信息预加载到@company变量中。简单的嵌套资源就可以了 现在,当我在“companys/:id/people”时,它将使用Peop

我有一个资源
公司
,它有许多
项目
人员
。公司的
索引
操作在表中显示每个公司。
show
操作显示了一些关于它的附加信息,然后我想显示的是另一个表,带有选项卡“Projects”和“People”

当我点击“人员”选项卡时,我应该转到URL“companys/:id/People”,同样,我也应该点击“Projects”选项卡。我不担心AJAX或在
show
操作期间将所有这些信息预加载到
@company
变量中。简单的嵌套资源就可以了

现在,当我在“companys/:id/people”时,它将使用
PeopleController#index
,但我想显示嵌套在公司
show
视图中的视图(我想它只是一个表)。因此,当我在“companys/:id/people”和“companys/:id/projects”之间切换时,唯一改变的是表格,而不是外部的公司信息


这类事情容易做吗?如果Rails不能轻松处理这类事情,我不介意使用其他东西。我只是对视图层没有太多的经验,所以我对它了解不多,因为我主要使用JSON。

我建议您特别看看rails指南

但是rails可以处理此问题,您的路线将按以下方式设置:

resources :company do
       resource :projects
       resource :people
end
我假设您已经设置了所有CRUD操作,那么这就可以了。但是请注意,它将更改您的命名路由

i、 e

如果你打电话

projects_path
在您看来,它们现在将成为:

company_projects_path
使用该命令可以看到完整的管线列表

rake routes

基本示例:

项目控制器和人员控制器:

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) %>
#视图/布局/company.html.erb
  • 信息
  • 信息
  • 信息
人员模板:

# 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 %>
#视图/people/index.html.erb
#就座
人事管理员
项目模板:

# 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 %>
#视图/projects/index.html.erb
#就座
项目控制员

请重新阅读问题。这是关于视图,而不是路由的。@LoganSerman。对于这种情况,我使用嵌套布局。你想要一些细节吗?如果你想要的话。我一会儿就要试一下。如果你想给我举个例子什么的,那会有帮助的。由你决定:)@ValeryKvonJust为清晰起见。。。为什么是嵌套布局?您可以始终使用通用布局,但必须重复“应用程序”布局(使用文档标记、脚本、元标记和其他内容)。嵌套布局可帮助您避免这种情况,并保持干燥。