我的数据库中有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>
一旦您已经准备好并工作,您可能需要考虑设置路线的替代方法。 例如,您可能希望users
是 companies
下的嵌套资源。 有关此内容的更多信息,请参阅此处。
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