ссылка на с парами 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 ответа:
Возможно, вы захотите попробовать подойти к вещам немного более ненавязчиво. Я бы рекомендовал заменить ваш
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 намного проще.