link_to с параметрами jquery в рельсах - PullRequest
8 голосов
/ 27 ноября 2010

Я хочу сделать поиск по месту в моем приложении 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 ]

15 голосов
/ 07 декабря 2010

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

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

Это практически идентично тому, что у вас уже есть, за исключением того, что оно включает уникальный идентификатор, а также путь к контроллеру / геокоду в атрибуте data-href. Это поможет вам немного отделить рубин и 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){} );
});
3 голосов
/ 08 декабря 2010

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

Полагаю, вы уже добавили специфичный для jquery файл rails.js.

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

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

$('<id of the form').bind('ajax:success', function(event, data, status, xhr) {
   ... process your data here ...
} 
2 голосов
/ 03 декабря 2010

Вы можете попробовать это:
<%= 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
  })
});


0 голосов
/ 27 ноября 2010

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

...