Ruby on Rails在select_tag中显示正确数量的options_for_select

时间:2017-04-27 12:57:53

标签: ruby-on-rails iteration html-select

我认为我的问题很小,但我没有在互联网上找到一个好的解决方案。

<%= form_tag url_for(controller: 'courses', action: 'add_teacher') , method: 'put' do%>
<%= select_tag :teacher, options_for_select(Teacher.all.collect {|t| ([t._name, t.id] unless @course.teachers.include?(t))})%>
<%= hidden_field_tag(:course, value = @course.id) %>
<%= submit_tag 'hinzufügen' %>

我在我的课程/新视图中获得了此代码。我想为一门课程添加一个或多个教师,但我不希望能够将它们添加两次或更多次。所以我用过这个:

unless @course.teachers.include?(t)

问题是,它仍然如下所示:empty rows

任何人都可以为这个问题找到更好的解决方案吗?如果教师=零,会发生什么?

谢谢你的帮助

2 个答案:

答案 0 :(得分:1)

您收集了一些apply值,您可以在最后使用nil删除这些值。

compact

答案 1 :(得分:0)

您可以使用compact删除nil值。

<%= select_tag :teacher, options_for_select(Teacher.all.collect {|t| ([t._name, t.id] unless @course.teachers.include?(t))}.compact )%>

或者您可以使用以下方法删除“”或nil值

<%= select_tag :teacher, options_for_select(Teacher.all.collect {|t| ([t._name, t.id] unless @course.teachers.include?(t))}.select(&:presence) )%>

选择(&amp;:prescence)的例子:

Teachers = ["mark", "robin", "", "jack", nil, "steve"]

Teachers .select(&:presence)

["mark", "robin", "jack", "steve"]

契约的例子:

Teachers = ["mark", "robin", "", "jack", nil, "steve"]

Teachers.compact

["mark", "robin","", "jack", "steve"]