2014-11-24 56 views
1

如何根据值从以下项目中删除项目?Rails4 - 如何从基于值的select中删除一个选项?

<%= select_tag :langlevel, options_for_select(Level.order(:name).map {|item| [item.name, item.id]}), id: 'langlevel_id', :class => 'form-control lang' %> 

它给了我这个

<select class="form-control lang" id="langlevel_id" name="langlevel"><option value="2">A1:Beginner</option> 
<option value="3">A2:Elementary</option> 
<option value="4">B1:Pre-Intermediate</option> 
<option value="5">B2:Intermediate</option> 
<option value="6">C1:Upper Intermediate</option> 
<option value="7">C2:Advanced</option> 
<option value="1">Native</option></select> 

我想删除它有值= “1” 选择 “本地”。我的意思是我不希望它显示在一个地方。

<option value="1">Native</option></select> 

请帮助

回答

1

使用where not并排除级别ID为1

<%= select_tag :langlevel, options_for_select(Level.where.not(:id => 1).order(:name).map {|item| [item.name, item.id]}), id: 'langlevel_id', :class => 'form-control lang' %> 

它大概吸尘器移动这样的逻辑来帮手

def non_native_levels_as_options 
    Level.where.not(:id => 1).order(:name).map {|item| [item.name, item.id]} 
end 

<%= select_tag :langlevel, options_for_select(non_native_levels_as_options), id: 'langlevel_id', :class => 'form-control lang' %> 
+0

工程就像一个魅力。感谢您分享将其移至帮助程序的最佳做法 – LovingRails 2014-11-24 19:03:22

1

像这样的东西应该工作:

<%= select_tag :langlevel, options_for_select(Level.all.order(:name).reject { |s| s.id == 1 }.map {|item| [item.name, item.id]}), id: 'langlevel_id', :class => 'form-control lang' %> 

您有权拒绝,然后再图。

从这里:Exclude option from collection.map in Ruby on Rails?

+0

@Vimsha答案的比我好;) – Guido 2014-11-25 18:28:29

相关问题