2015-04-01 46 views
-1
<div class="field"> 
    <%= f.label :section_id %>  
    <%= f.select :section_id,options_from_collection_for_select(Section.all, :id, :name)%> 
</div> 


<div class="field"> 
    <%= f.label :sub_section_id %> 
    <div id="sub_section_div"></div> 
</div> 

<div class="actions"> 
    <%= f.submit %> 
</div> 

<script type="text/javascript"> 
$(document).ready(function(){ 

    $("select#sub_section_section_id").change(function(){ 
      var id_value_string = $(this).val(); 
      **$('#sub_section_div').html('<%= j f.select :name,options_from_collection_for_select(SubSection.where(:section_id=>1), :id, :name)%>');**   
    }); 
}); 
</script> 

<% end %> 

我有兩個下拉列表中page.When我選擇,我想填充其各自的子部分中的任何部分視圖sectionsubSection。但問題是,我想通過id_value_stringsection_id where條款。請幫我。謝謝。我如何通過JS變量在where子句中軌4

+0

使用4個空格縮進的代碼,這是一個噩夢閱讀 – RichardAE 2015-04-01 13:11:03

+0

你爲什麼不這樣做在js.erb文件的同...所以你會得到js代碼使用Ruby的自由...嘗試一下 – Milind 2015-04-01 13:36:10

+0

你需要記住,rails和javascript運行在完全不同的環境中,並且決不會互動。 Rails在服務器上運行以生成一個文本文件,並將其發送回瀏覽器。這個文本文件可以包含HTML,JavaScript等。瀏覽器然後加載這個文本文件,顯示HTML並運行JavaScript。所以,rails和javascript之間的所有交互都是通過A)rails來渲染出一些javascript來運行在頁面加載上,或者B)javascript向服務器發送一個請求,例如rails,並且對它返回的響應做一些事情。 – 2015-04-01 13:51:28

回答

1

它不會像這樣工作,你不能在加載頁面之後將JS傳遞給Ruby。我想你會更好使用AJAX:

$(document).ready(function(){ 
    $("select#sub_section_section_id").change(function(){ 
     var id_value_string = $(this).val(); 

     $.ajax({ 
      url: "<%= sub_sections_path %>", 
      data: { 
       section_id: id_value_string 
      } 
     });  
}); 

您將需要爲此創造一個新的控制器/動作,然後在你的相關的.js文件查看,你可以不喜歡你了傳遞線路變量通過AJAX發送:

$('#sub_section_div').html('<%= j f.select :name,options_from_collection_for_select(SubSection.where(:section_id=>params[:section_id), :id, :name)%>'); 
+0

非常感謝@RichardAE。 – 2015-04-02 05:42:27