2017-04-27 7 views
0

私の問題は本当に小さいと思いますが、インターネット上では良い解決策が見つかりませんでした。Ruby on Railsはselect_tagのoptions_for_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' %> 

私のコース/新しい表示でこのコードを取得しました。 1つのコースに1人以上の教師を追加したいのですが、2人以上追加することはできません。だから私はこれを使用:

unless @course.teachers.include?(t) 

問題があり、それはまだこのようになります:empty rows

は、誰もがこの問題のより良い解決策を持ってもいいですか?教師=無しの場合はどうなりますか?

はあなたがコレクションにあなたが最後にcompactとの取り除くことができますいくつかのnil値をしたヘルプ

+0

いくつのティーあなたはこのアプリを持っているつもりですか?オートコンプリートフィールドは、長期的にはよりよい解決策になるかもしれません。 –

+0

@ ThomasR.Kollああ、私は検索機能にオートコンプリートフィールドを持っているのが大好きです。そして、この場合も同様です。しかし、私はそれが難しいと思った。それで私を助けてもらえますか? :) – homior

+0

コントローラに 'autocomplete'メソッドが必要です。フロントエンドには、そのジョブ用のたくさんのjavascriptライブラリがあります。 –

答えて

1

のためのuに感謝します。

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

nil値を削除するにはcompactを使用できます。

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

例(&: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'はユニークなので、労力を倍増する必要はありません。 –

+0

@thomas R Kollは意味をなさない:) –

関連する問題