2012-08-15 72 views
0

我在我的数据库中有2个表,公司&用户。我有一个列表(显示为表格)列出所有公司。现在我想在每行中插入一个链接,让用户进入另一个列表(显示为表格),该列表仅显示属于特定公司行的用户。如何在erb中创建向下钻取表格 - Ruby on Rails

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> 

<%结束%>

回答

0

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

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下的嵌套资源。有关详细信息,请参阅here

+0

为什么您认为使用嵌套资源更好? – Raul 2012-08-15 20:39:28

+0

如果嵌套功能真正反映了您的域名,则反映整个应用程序(包括构建网址和导航)会更清晰。但是,如果这种深入研究是一次性案例,则嵌套可能没有多大益处。 – PinnyM 2012-08-16 14:11:38

+0

你能看看这个问题吗? http://stackoverflow.com/questions/12012728/how-to-create-a-new-record-or-update-if-a-particular-record-based-on-an-attribut – Raul 2012-08-17 22:28:18

0

件批量的答案会工作,但如果你在一个公司范围界定你的用户,你可能想看看嵌套资源(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