我如何在where子句rails 4中传递js变量

时间:2015-04-01 13:06:56

标签: javascript jquery ruby-on-rails ruby-on-rails-4

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

我在视图页面中有两个下拉列表sectionsubSection。当我选择任何部分时,我想填充其各自的子部分。但问题是我想将id_value_string传递给where子句中的section_id。请帮助我。谢谢。

1 个答案:

答案 0 :(得分: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 )%>');