Форма ввода, где пользователь может ввести регулярное выражение - PullRequest
0 голосов
/ 09 мая 2011

У меня есть приложение rails, в котором мне нужно создать некоторую форму ввода, где пользователь мог бы вводить регулярное выражение.Это регулярное выражение нужно было передать моему методу check_site (url, regex), который будет возвращать true или false, в зависимости от регулярного выражения, найденного на странице.Я попытался создать 'link_to':

link_to 'Search', check(item.name, @pattern)

В этом случае метод "check" вызывается не с нажатой кнопкой, а с загрузкой страницы.Нужно ли использовать JS + AJAX?Как?

1 Ответ

2 голосов
/ 09 мая 2011

Краткий курс по настройке AJAX / JS с вашей формой Rails:

  1. Убедитесь, что на вашей странице вызывается правильный javascript <head>: JQuery + application.js (конечно, Jquery-совместимая версия!)

  2. Измените вашу ссылку на:

    link_to 'Search', check_item_path(:name=>item.name, :id=>@pattern, :var=>var, etc.), :remote => true
    
  3. В items_controller:

    def check  
      ...your regex...  
      respond_to do |format|  
        format.html { redirect_to ...(wherever you'd like if no .js) }  
        format.js  
      end  
    end
    
  4. Создайте файл с именем check.js.erb в соответствующей папке представлений и введите JavaScript, который вы хотите обновить страницу / подтвердить успешную отправку формы / вернуть результаты поиска и т. Д.

    $(document).ready( function() {
      $("#result").html(" <%= @item.result == true ? "true" : "false" %> ");
    });
    

Нет ошибки метода: check_item_path

Это означает, что Rails не распознает маршрут к этому действию контроллера. Запустите rake routes в консоли и посмотрите, соответствует ли что-нибудь контроллеру предметов, действие check_item. Если нет, добавьте:

match 'items/check_item'

в ваш файл маршрутов. Затем снова запустите маршруты рейка, и вы увидите, что где-то появится check_item - если это произойдет, вы можете снова использовать check_item_path.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...