2011-11-10 55 views
1

我在索引查看查找控制器上有以下HTML下拉框。我想根据Dropbox的选择更新视图。我需要以某种方式将选择传递给控制器​​。使用Rails 3.1中的JQuery下拉框发布到控制器

<!-- index.html rendered from Search/Index --> 
<select id="search_params" name="search[params]"> 
    <option value="tacos">tacos</option> 
    <option value="pizza">pizza</option> 
</select> 

搜索控制器代码采用PARAMS和吐出消息

def index 
    query = params[:search] 
    msg = "Your favorite food is #{query}! OMGWTFBBQ!?!?!?!" 

    respond_to do |format| 
    format.html 
    format.js 
    end 
end 

这个Javascript应该以某种方式被选择后,发布下拉框选择控制器:

$("#search_params").change(function() { 
    var state = $('select#search_params :selected').val(); 
    if(state == "") state="0"; 
    //Send the selection to the controller Search controller somehow 
    // and then render a new view immediately ? 
    //I AM NOT GOOD WITH COMPUTER 
}) 
return false; 
}); 

我我看了很多其他的Rails + JQuery示例,jQuery API文档等等。无法找到简单问题的答案或者我只是过度王。

无论如何,在此先感谢您的帮助! 〜Dan

回答

1

我不是Ruby/Rails的人,但我知道jQuery。

我想你想要像

$("#search_params").change(function() { 
    var state = $('select#search_params :selected').val(); 
    if(state == "") { 
    state="0"; 
    } 
    //Call jQuery AJAX 
    $.ajax({ 
     url:'/path/to/your/controller/action', 
     type:'POST', 
     data:'search=' + state, 
     success: function(data) { 
      alert(data); 
     }, 
     error: function() { 
      alert('Stuff went wrong'); 
     } 
    }); 
    return false; 
}); 

希望这有助于,并有jQuery AJAX doc page的读取。

我不太清楚你是如何从控制器返回你的数据呢?是否有相应的视图呈现msg

1

结帐jQuery.ajax()文档:http://api.jquery.com/jQuery.ajax/

你可能需要把这个在application.js中的顶部(或这可能只是一个Rails 2.x的要求):

// Place your application-specific JavaScript functions and classes here 
// This file is automatically included by javascript_include_tag :defaults 
jQuery.ajaxSetup({ 
    'beforeSend': function(xhr){ 
    xhr.setRequestHeader("Accept", "text/javascript"); 
    var token = $("meta[name='csrf-token']").attr("content"); 
    xhr.setRequestHeader("X-CSRF-Token", token); 
    } 
}); 

我设置jQuery.ajax()以期望服务器响应中的原始JavaScript代码。

我有我的正常html模板呈现部分。或者,所有的HTML都被抽象为部分,而不是模板。

JavaScript的模板将呈现基本上做到这一点:

$("div#some_id").html(
    <%= escape_javascript(render(:partial=>'partial_name')) %> 
); 
相关问题