Кнопки с использованием Ajax не работают на Heroku

113
11

Здесь я следую за Майклом Хартлом, известным в Ruby on Rails Tutorials (Rails 3.2). Раздел "11.2.5. Рабочая кнопка с Ajax" работает на локальной машине, но не работает на Heroku. Когда я нажимал кнопки "Follow" или "Unfollow", ничего на странице не обновлялось. Хотя я вижу, что действие действительно было вызвано из журналов.

2012-02-22T04:05:17+00:00 app[web.1]: Started POST "/relationships" for 67.188.133.121 at 2012-02-22 04:05:17 +0000
2012-02-22T04:05:17+00:00 app[web.1]: Processing by RelationshipsController#create as JS
2012-02-22T04:05:17+00:00 app[web.1]: Parameters: {"utf8"=>"✓", "authenticity_token"=>"nsYrHM0aLlEGoI19Zv8hImEmbfWPZ+gSy5xmgAV+V60=", "relationship"=>{"followed_id"=>"15"}, "commit"=>"Follow"}
2012-02-22T04:05:17+00:00 app[web.1]: Redirected to https://etl-rails32-tut-sample-app.herokuapp.com/users/15
2012-02-22T04:05:17+00:00 app[web.1]: cache: [POST /relationships] invalidate, pass
2012-02-22T04:05:17+00:00 app[web.1]: Completed 302 Found in 66ms (ActiveRecord: 61.2ms)
2012-02-22T04:05:17+00:00 heroku[router]: POST etl-rails32-tut-sample-app.herokuapp.com/relationships dyno=web.1 queue=0 wait=0ms service=75ms status=302 bytes=123

Затем мне пришлось вручную нажать кнопку обновления браузера (FireFox 7.0), чтобы обновить всю страницу, и кнопка будет правильно переключена в результате.

Файл, app/views/layouts/application.html.erb выглядит следующим образом:

<!DOCTYPE html>
<html>
<head>
<title><%= full_title(yield(:title)) %></title>
<%= render 'layouts/stylesheets' %>
<%= javascript_include_tag "application" %>
<%= csrf_meta_tags %>
</head>
<body>
<div class="container">
<%= render 'layouts/header' %>
<section class="round">
<% flash.each do |key, value| %>
<%= content_tag(:div, value, class: "flash #{key}") %>
<% end %>
<%= yield %>
</section>
<%= render 'layouts/footer' %>
<%= debug(params) if Rails.env.development? %>
</div>
</body>
</html>

спросил(а) 2012-02-22T07:30:00+04:00 9 лет назад
1
Решение
121

Возможно, я опоздал на объявление, которое вы, возможно, нашли и ответили, но это исправило это для меня.

Если вы используете кофе-рельсы, жемчуг переместите драгоценный камень с кофе-рельсами за пределами группы активов. Я положил его прямо под jquery-rails gem (не думаю, что это имеет значение), но после того, как он оказался вне группы активов, он работал в героике.

ответил(а) 2013-07-11T20:25:00+04:00 7 лет, 7 месяцев назад
43

Я только что закончил загрузку моего кода в герою, и кнопки работают. Я тоже n00b. Мой application.html.erb довольно близок к вашему. Я посмотрел на ваш сайт (очень сильно отличается от моего), и я получаю ту же проблему, которую вы получаете. Мои журналы показывают разницу (удаленные заголовки строк):

Started POST "/relationships" for 1.1.9.1 at 2012-04-10 21:06:47 +0000
Processing by RelationshipsController#create as JS
Parameters: {"utf8"=>"✓", "authenticity_token"=>"jF6cuJakhooP/fIdfAhIfhy+Djgox3jukyJbm86UkVU=", "relationship"=>{"followed_id"=>"2"}, "commit"=>"Follow"}
Rendered users/_unfollow.html.erb (3.8ms)
Rendered relationships/create.js.erb (7.0ms)
Completed 200 OK in 36ms (Views: 4.2ms | ActiveRecord: 24.1ms)
cache: [POST /relationships] invalidate, pass
POST strong-stone-3754.herokuapp.com/relationships dyno=web.1 queue=0 wait=0ms service=93ms status=200 bytes=584

Моя ручка делает вашу переадресацию.

Не знаю, насколько это важно, но я зацепил.js как с вашей страницы, так и с моей и сделал wc на них. Они более чем разные.

18    1559  120293 mine.js
18 1343 99603 yours.js

Возможно, проблема заключается в представлении/отношениях/create.js.erb?

$("#follow_form").html("<%= escape_javascript(render('users/unfollow')) %>")
$("#followers").html('<%= @user.followers.count %>')

Или, возможно, для создания и уничтожения методов Relationship RelationsContoller должны отвечать следующие запросы AJAX:

respond_to do |format|
format.html { redirect_to @user }
format.js
end

ответил(а) 2012-04-11T01:43:00+04:00 8 лет, 10 месяцев назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема