2016-06-27 4 views
0

新しい学校プログラムのパスには、どの学校が新しいプログラムを取得しているかを示すために、渡された学校が必要です。そのような学校がない場合は、すべての学校が利用できるようにドロップダウンを追加して、誰かがプログラムを追加する学校を選択できるようにします。これを選択すると、javascript関数がトリガされ、ボタンを学校の価値に戻すことはできますが、私が望むようには機能しません。ここでは、コードは次のとおりです。選択ドロップダウンメニューを使用してruby on railsパラメータでlink_toを更新する

<% if can? :create, @program %> 
 
    <%= link_to 'New Program', new_school_program_path(@new_program_school), class: 'btn btn-primary', id: 'new-program-no-school' %> 
 
    <%= select_tag(:menu_select, options_for_select(School.pluck(:name), School.all)) %> 
 
    <br/> 
 
<% end %> 
 

 

 
<script> 
 
    $('#menu_select').bind('change', function() { 
 
    var newLink = $('#menu_select').val(); 
 
    $('#new-program-no-school').attr('href', '<%= new_school_program_path(newLink) %>'); 
 
    }); 
 
</script>

答えて

1

ここで、この問題は、Railsは、ブラウザでRubyコードとは独立して実行されるjavascriptをレンダリングしていることです。 newLink変数は、テンプレート内のパスをレンダリングするときにRailsで使用することはできません。

あなたはそれを回避するために、この操作を行うことができます。

<script> 
    $('#menu_select').bind('change', function() { 
    var templatePath = '<%= new_school_program_path("school_id") %>' 
    var newLink = $('#menu_select').val(); 
    $('#new-program-no-school').attr('href', templatePath.replace("school_id", newLink)); 
    }); 
</script> 
+0

これは働いていたが - ちょうどnewLinkにスペースを取り除くためにslugify機能を追加する必要がありました - 感謝を! (/ \^\ w \)を空白に置き換えます。 .replace(/ [^ \ w \ (/ \ - +/g、 ' - ')//複数の単語を単一の単語に置き換える - .replace(/^- +) /、 '')//トリム - テキストの先頭から .replace(/ - + $ /、 ''); //トリム - テキストの末尾から } ' –

関連する問題