ссылка на с парами jquery в rails


Я хочу сделать поиск на месте в моем приложении rails.
Я использовал button_to_remote с прототипом, но теперь я использую JQuery, поэтому я изменил на link_to.
Вот мой код:

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

Я хочу передать текстовое поле адреса моему контроллеру, но результат не такой, как я ожидал.

/mycontroller/geocode?with=%27address%3D%27%2B%24%28%27record_location___address%27%29.value

Как я могу представить свою ценность?

4 8

4 ответа:

Возможно, вы захотите попробовать подойти к вещам немного более ненавязчиво. Я бы рекомендовал заменить ваш link_to вызов чем-то вроде:

<%= link_to "Search", "#", :id => "search_geocode", :"data-href" => my_controller_geocode_path %>
Это практически идентично тому, что у вас уже есть, за исключением того, что он включает уникальный идентификатор, а также путь контроллера/геокода в атрибуте data-href. Это поможет вам сохранить ваши ruby и javascript немного более разделенными.

Тогда в вашем application.js (или где-то похожем):

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

Что это такое эффективно выполнение-это привязка прослушивателя событий click к кнопке поиска, которая выводит адрес на url или путь, указанный в атрибуте data-href ссылки поиска.

Я также заметил, что в вашем коде вы устанавливаете id исходного адреса в ruby. Если этот атрибут id должен измениться на основе каких-то условий шаблона страницы, вы можете расширить мой пример, добавив другой параметр data- в вашу ссылку. Например:

<%= link_to "Search", "#", :id => "search_geocode", :"data-href" => my_controller_geocode_path, :"data-address-id" => address_helper_id %>

И снова, в application.js заменяя выше с чем-то вроде:

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

Самый простой способ-поместить поле поиска и кнопку отправки в обычную форму (используя стандартные помощники rails view). И вы добавляете опцию :remote => :true в форму. Смотрите form_for url helper для документов.

Я предполагаю, что вы уже добавили конкретные рельсы jquery.файл js.

Если сделать это подобным образом, то форма автоматически будет отправлена через ajax к данному действию.

После этого вам понадобится только обработчик событий ajax:success, чтобы вы могли обрабатывать данные.

$('<id of the form').bind('ajax:success', function(event, data, status, xhr) {
   ... process your data here ...
} 

Вы можете попробовать это:
<%= text_field_tag :address %>
<%= submit_tag "Search", :id => "search_button" %>


### Paste following code in your javascript

$("#search_button").live("click", function(){
  $.ajax({
    complete:function(request){},
    data:'address='+ $('#address').val(),
    dataType:'script',
    type:'get',
    url: '[ROUTE TO ACTION]' // in your case, may be '/[CONTROLLER NAME]/geocode' until you define route
  })
});


Это не совсем прямой ответ на ваш вопрос, но вы заглядывали в jrails? Он позволяет использовать те же прототипы JavaScript-помощников, которые использовались до перехода на jquery. Это сделало мой переход от прототипа к jquery намного проще.