0

我想从集合中隐藏一个元素,而不是手动设置。

<tr>
 <td> <%= f.label :department, 'Select a Department, 
 you want to report to  : ' %>  <br> </td>
 <td><%= collection_select(:feedback, :department_id, Department.order('name ASC'),    
 :id, :name) %></td>

现在部门列表有管理员、cat1、cat2、cat3 等。我想从下拉列表中隐藏管理员。怎么做 ?

4

2 回答 2

0

只需将其从集合中删除

 <%= collection_select(:feedback, :department_id, Department.where("name <> 'admin'").order('name ASC'),    
     :id, :name) %>
于 2013-09-12T10:39:54.527 回答
0

您不应在视图中使用 SQL 语句。这就是控制器的用途。

def edit_action
   @departments = Department.where('name != admin').order('name ASC').all
end

现在您可以在您的 edit_action.html.erb 中使用 @departments 变量(或者在您的情况下它的名称是什么)。

<td><%= collection_select(:feedback, :department_id, @departments, :id, :name) %></td>

但是,您不应该创建太多以 . 开头的全局变量@。我认为规则是最大 3 或 4。或者,您可以使用局部变量并将它们传递给您的视图,如下所示。

def edit_action
   departments = Department.where('name != admin').order('name ASC').all
   render :action => 'edit_action', :locals => { :depts => departments }
end

<td><%= collection_select(:feedback, :department_id, depts, :id, :name) %></td>

至于您要隐藏的管理选项。您需要先将其从集合中删除,然后再将其传递给您的视图。使用某种条件或名称匹配在您的视图中删除它很容易出错,不推荐。

于 2013-09-12T10:42:08.117 回答