Rails form_for: remote => true не вызывает метод js - PullRequest
33 голосов
/ 19 ноября 2010

Понятия не имею, почему это не работает, я изучаю рельсы и слежу за книгой, в которой говорится, что это так:

    <%= form_for([@article,@article.comments.new ], :remote=>true, :html => {:style=>'display: none;' }) do |f|%>
    <div class="field">
      <%=    f.label :name %>
      <%=    f.text_field :name %>
    </div>
    <div class="field">
      <%=    f.label :email %>
      <%=    f.text_field :email %>
    </div>
    <div class="field">
      <%=    f.label :body %>
      <%=    f.text_area :body %>
    </div>
    <%= f.submit %>
<% end %>

Однако это не работает, и когдаЯ проверяю запрос в firebug, URL не заканчивается на .js, у вас есть идеи, почему?

Ответы [ 6 ]

34 голосов
/ 29 мая 2011

Когда вы проверяете запрос, сделанный в firebug, только потому, что URL не заканчивается на .js, это не означает, что он не был вызван из javascript.Чтобы убедиться, что вы должны проверить заголовок запроса, чтобы увидеть, что такое параметр Accept.Если он говорит «application / javascript», тогда все хорошо.

Во-вторых, очень распространенная проблема при запуске опробовать: remote => true - это то, что необходимые библиотеки javascript не включены в ваш код.Поэтому я предполагаю, что в вашем макете отсутствует следующий код:

<%= javascript_include_tag :defaults %>
<%= csrf_meta_tag %>

Если это так, просто включите его в тег <head> вашего макета.

21 голосов
/ 31 мая 2011

Скорее всего, случится так, что вам не хватает файла rails.js, который обрабатывает его для вас, используете ли вы прототип или jquery.

Если вы используете jQuery, самый простой способ получить всенеобходимые файлы используют гем jquery-rails.Это добавит генератор для установки jquery и требуемый rails.js.

введите что-то вроде в корне вашего приложения rails:

rails g jquery:install

А затем, внутри вашего application.html.erb добавьте строку

<%= javascript_include_tag :defaults %>

или явно (не забудьте включить свой jquery отдельно):

<%= javascript_include_tag :rails, :application %>

[РЕДАКТИРОВАТЬ: для Rails 3.1 или более поздней версии с использованием конвейера активов]

Используйте гем jquery-rails (как упомянуто выше) и добавьте следующие строки в app/assets/javascripts/application.js (если их там уже нет):

//= require jquery
//= require jquery_ujs

Надеюсь, это поможет!

7 голосов
/ 15 июня 2015

Эта ошибка возникает, если вы не добавили файл jquery_ujs .Вы только что включили файл jquery.

Таким образом, вам нужно добавить оба файла вручную при просмотре или указать их в application.js или любом другом файле, который вы используете для конкретной макет .

В зависимости от вашего сценария вы можете следовать 1-му или 2-му решению.

1-е решение:

<%= javascript_include_tag :jquery, :jquery_ujs %>

2-е решение:

  1. Требуются jquery и jquery_ujs в app / assets / application.js

    //= require jquery.js
    
    //= require jquery_ujs
    
  2. Включите файл application.js в файл layout .

    <%= javascript_include_tag :application %>
    

Примечание:

Также добавьте тег csrf в файл макета для обоих решений.

<%= csrf_meta_tag %>

IЯ предполагаю, что у вас есть код ниже в вашем Gemfile и уже установлен этот Gem.

gem 'jquery-rails'
6 голосов
/ 07 августа 2014

Проверьте ваш /app/assets/javascript/application.js файл

Он должен быть включен ниже файлов там.jquery_ujs отвечает за работу функции remote=> true.

require `jquery`
require `jquery_ujs`

Happy Coding !!

4 голосов
/ 04 июня 2011

Проверьте контроллер: есть ли у него блок response_to?

Если вы сгенерировали ваше приложение с помощью rails generate scaffold, оно будет выглядеть примерно так:

    respond_to do |format|
      format.html
      format.xml  { .... }
    end

Если он есть, просто вытащите весь блок, от response_to до конца; или альтернативно замените весь блок одной строкой

    respond_to :html, :js

или, в качестве альтернативы, отредактируйте блок, добавив дополнительную строку, показанную здесь

    respond_to do |format|
      format.html
      format.js
      format.xml  { .... }
    end

Либо должно работать в вашем случае.

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

Изменение:

[@article,@article.comments.new ] 

для

@article

Я предлагаю вам прочитать API в соответствующем разделе: http://api.rubyonrails.org/classes/ActionView/Helpers/FormHelper.html

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