2017-04-27 46 views
0

我認爲我的問題確實很小,但我在互聯網上沒有找到一個好的解決方案。Ruby on Rails顯示正確數量的options_for_select in select_tag

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

五月任何人有這個問題更好的解決辦法?如果教師=零,會發生什麼?

感謝ü的幫助

+0

有多少人教她打算有這個應用程序嗎?從長遠來看,自動填充字段可能是更好的解決方案。 –

+0

@ ThomasR.Koll哦,我很想在我的搜索功能中有一個自動填充字段。也可能在這種情況下。但我認爲這太難了。你能幫我嗎? :) – homior

+0

您需要在控制器上使用'autocomplete'方法,並且在前端有大量用於工作的JavaScript庫。 –

回答

1

你做收集一些nil值,你可以得到與compact末擺脫。

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

您可以使用compact來刪除nil值。

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

,也可以使用下面的方法,將刪除 「」 或零值

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

實施例用於選擇(&: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"] 
+0

'Teacher.all'將是uniq,無需加倍努力。 –

+0

@thomas R Koll有道理:) –