如何在 ERB 中创建向下钻取表 - Ruby on Rails.



我的数据库中有2个表,Companies & Users。我有一个列表(显示为表格),列出了所有公司。现在我想在每一行中插入一个链接,可以将用户带到另一个列表(显示为表格),该列表仅显示属于特定公司行的用户?

Companies list
<table>
<% @companies.each do |company| %>
  <tr>
    <td><%= company.Name %></td>
    <td><%= company.addressline1 %></td>
    <td><%= company.addressline2 %></td>
    <td><%= company.City %></td>
    <td><%= company.postcode %></td>
    <td><%= company.Telephone %></td>
    <td><%= link_to 'Edit', edit_company_path(company) %></td>
    <td><%= link_to "Users", url_for(:users) %></td>  
  </tr>
<% end %>
</table>

用户列表

<table>
<% @users.each do |user| %>
  <tr>
    <td><%= user.username %></td>
    <td><%= user.email %></td>
    <td><%= UserType.find(user.user_type_id).user_type_name %></div>
    <td><%= check_box_tag(user, user.is_admin, user.is_admin) %></div>
    <td><%= check_box_tag(user, user.active_status, user.active_status) %></div>
    <td><%= link_to 'Edit',  edit_user_path(user) %></td>
  </tr>

<% 结束 %>

有多种方法可以做到这一点。 您可以从添加一个简单的路由开始:

match 'companies/:company_id/users' => 'users#for_company', :as => :company_users

在你的UsersController

def for_company
  @users = Company.find(params[:company_id]).users
  render :action => :index
end

在您的公司列表视图中,将链接更改为:

<td><%= link_to "Users", company_users_path(company) %></td>

一旦您已经准备好并工作,您可能需要考虑设置路线的替代方法。 例如,您可能希望userscompanies 下的嵌套资源。 有关此内容的更多信息,请参阅此处。

Pinny的答案会起作用,但如果你在公司范围内限定用户范围,你可能想查看嵌套资源(http://guides.rubyonrails.org/routing.html#nested-resources)

您可以将用户资源定义为config/routes.rb中公司的"子级"

resources :companies do
  resources :users
end

从那时起,您的用户控制器中始终有参数 :company_id 可用,可通过/companies/#{company_id}/users访问

然后,在控制器中,您可以限定公司对任何用户查询的范围,例如:

def show
  @company = Company.find(params[:company_id])
  @user = @company.users.find(params[:id])
end

最新更新