link_to与rails中的jquery params

pas*_*ine 8 search jquery ruby-on-rails in-place link-to

我想在我的rails应用程序中进行就地搜索.
我使用了button_to_remote和原型,但现在我正在使用JQuery,所以我改为link_to.
这是我的代码:

<%= link_to "Search", {:action => "geocode", :with => "'address='+$('#{address_helper_id}').value"}, :method => :post, :remote => true %>
Run Code Online (Sandbox Code Playgroud)

我想将地址文本字段传递给我的控制器,但输出不是我所期望的.

/mycontroller/geocode?with=%27address%3D%27%2B%24%28%27record_location___address%27%29.value
Run Code Online (Sandbox Code Playgroud)

我如何提交我的价值?

the*_*RON 15

您可能想尝试更不引人注意地接近事物.我建议用以下内容替换你的link_to电话:

<%= link_to "Search", "#", :id => "search_geocode", :"data-href" => my_controller_geocode_path %>
Run Code Online (Sandbox Code Playgroud)

这实际上与您已有的相同,只是它包含唯一的ID,以及data-href属性中的控制器/地理编码路径.这将有助于您保持ruby和javascript更加分离.

然后在你application.js(或类似的地方):

$('#search_geocode').live('click', function(event){
    event.preventDefault();
    $.post($(this).attr('data-href') + "?address=" + $('#address').val(), function(data){} );
});
Run Code Online (Sandbox Code Playgroud)

这实际上是将click事件监听器绑定到您的搜索按钮,该按钮将地址发布到data-href搜索链接属性中提供的URL或路径.

我还注意到在你的代码中,你id在ruby中设置了源地址.如果此id属性需要根据某种页面模板条件进行更改,则可以通过向data-链接添加其他参数来扩展我的示例.例如:

<%= link_to "Search", "#", :id => "search_geocode", :"data-href" => my_controller_geocode_path, :"data-address-id" => address_helper_id %>
Run Code Online (Sandbox Code Playgroud)

再次,用以下内容application.js替换上面的内容:

$('#search_geocode').live('click', function(event){
    event.preventDefault();
    $.post($(this).attr('data-href') + "?address=" + $($(this).attr('data-address-id')).val(), function(data){} );
});
Run Code Online (Sandbox Code Playgroud)