2015-04-01 47 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