Ruby on rails 如何在Rails的下拉列表(集合列表)中隐藏特定值?

Ruby on rails 如何在Rails的下拉列表(集合列表)中隐藏特定值?,ruby-on-rails,ruby-on-rails-3.2,Ruby On Rails,Ruby On Rails 3.2,我想隐藏集合中的元素,而不是手动集合 <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'), :

我想隐藏集合中的元素,而不是手动集合

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


现在,部门列表中有admin、cat1、cat2、cat3等。我想从
下拉列表。如何做到这一点?

只需将其从收藏中删除即可

 <%= collection_select(:feedback, :department_id, Department.where("name <> 'admin'").order('name ASC'),    
     :id, :name) %>


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

def edit_action
   @departments = Department.where('name != admin').order('name ASC').all
end
现在,您可以在edit_action.html.erb中使用@departments变量(或者在您的案例中使用的任何名称)


至于你想要隐藏的管理选项。在将其传递到视图之前,需要将其从集合中删除。使用某种条件或名称匹配在视图中删除它很容易出错,不建议这样做。

将其从集合中删除。我不认为在视图层中这样做是一个好主意。首先获取Department是一些其他变量和条件,这样它就不会显示admin,然后将其放在下拉列表的结果中。“您不应该在视图中使用SQL语句。这就是控制器的用途。”实际上,我会说SQL是模型的工作。就我个人而言,我只会创建作用域或过滤函数,如果它们被多次使用。模型应仅包含不特定于单个视图的公共逻辑。[]部分应为@部门。我更喜欢第二种方法,因为在我的例子中,我需要为不同的登录隐藏不同的用户类型。我很想用第二种方法。谢谢你的错误提示。这两种方法基本上是相同的,但我发现在太多的情况下,全局变量在控制器中使用得太多,这是一种不好的做法。尽管如此,在所有erb代码之间更容易发现全局代码。这种级别的业务逻辑实际上不应该出现在视图中。让模型定义这个,让控制器调用这个方法,并设置一个实例变量,以便在视图中使用。@Graemeclean:我完全同意你的观点,我刚才提到了实现它的方法。
<td><%= collection_select(:feedback, :department_id, @departments, :id, :name) %></td>
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>