2

我有一个资源Company有很多ProjectsPeople. 公司的index操作在表格中显示每个公司。该show操作显示了一些关于它的附加信息,然后我想显示另一个表,其中包含“项目”和“人员”选项卡。

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

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

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

4

2 回答 2

2

基本示例:

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

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

我建议你看一下 rails guides,特别是从外部路由到.

然而,rails 可以处理这个问题,您的路线将通过以下方式设置:

resources :company do
       resource :projects
       resource :people
end

我假设您已经设置了所有 CRUD 操作,那么这将起作用。但是请注意,它会更改您的命名路线。

IE

如果你打电话

projects_path

在您看来,它们现在将变为:

company_projects_path

您可以使用命令查看完整的路由列表

rake routes
于 2013-01-05T19:53:24.193 回答