如何设置嵌套资源的视图,这些资源在Rails的父资源中显示为选项卡



我有一个资源Company,它有许多ProjectsPeople。公司的index操作将每个公司显示在一个表中。show动作显示了关于它的一些附加信息,然后我想显示的是另一个表,带有"Projects"one_answers"People"选项卡。

当我点击"People"选项卡时,我应该去URL"companies/:id/People",同样地,对于"Projects"选项卡。我不担心AJAX或在show操作期间将所有这些信息预加载到@company变量中。一个简单的嵌套资源就可以了。

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

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

基本例子:

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 %>

我建议您看一下rails指南,特别是从外到内的路由。

尽管rails可以处理这个问题,但是您的路由将按照以下方式设置:

resources :company do
       resource :projects
       resource :people
end

我假设您已经设置了所有CRUD操作,那么这将工作。但是要注意,它会改变你的命名路由。

。e

如果你在呼叫

projects_path

,它们现在将变成:

company_projects_path

你可以使用命令

查看完整的路由列表
rake routes

相关内容

  • 没有找到相关文章

最新更新