Я прохожу через Rails Tutorial Майклом Хартлом и ударяю небольшую хватку в §12.2.5, где мы должны создать рабочую кнопку с Ajax. Я знаю, что код верен (я закончил копирование его непосредственно из книги и три раза перепечатывал его), и я зеленый. Но на самом деле это не работает!
В этой части урока мы меняем обычную кнопку отправки формы для работы с Ajax, чтобы вся страница не "обновлялась" (действительно, перенаправлялась на ту же страницу), а вместо этого просто кнопка и соответствующая боковая панель обновление элемента. Проблема заключается в том, что кнопка не перезагружается автоматически при нажатии, поскольку я ожидаю. Он перезагружается при обновлении страницы. Если я отключу JS в своем браузере, он вернется - как и следовало ожидать - к HTML-версии, которая вызывает перенаправление и "обновляет" всю страницу. Если вам интересно, я попытался обновить страницу, и я попробовал Firefox, Safari и Chrome и Chrome в инкогнито. Я отключил и перезапустил сервер rails, spork и autotest. И я переписал весь код, а затем скопировал весь код книги. Все еще в тупике.
Итак, несмотря на то, что тест зеленый, у меня есть некорректно работающая функция. Может быть, там что-то мне не хватает, и вы можете помочь мне найти его? Возможно, мне не хватает драгоценного камня, связанного с javascreipt, драгоценного камня Ajax...
Соответствующие части кода:
relationships_controller.erb:
class RelationshipsController < ApplicationController
before_filter :authenticate
def create
@user = User.find(params[:relationship][:followed_id])
current_user.follow!(@user)
respond_to do |format|
format.html { redirect_to @user }
format.js
end
конец
def destroy
@user = Relationship.find(params[:id]).followed
current_user.unfollow!(@user)
respond_to do |format|
format.html { redirect_to @user }
format.js
end
end
end
_follow.html.erb:
<% = form_for (current_user.relationships. build (: follow_id = > @user.id), : remote = > true) do | f | % > <% = f.hidden_field: follow_id% >
<% = f.submit "Follow" % > <% end% >
_unfollow.html.erb:
<%= form_for(current_user.relationships.find_by_followed_id(@user),
:html => { :method => :delete },
:remote => true) do |f| %>
<% end% >
create.js.erb
$("follow_form").update("<%= escape_javascript(render('users/unfollow')) %>")
$("followers").update('<%= "#{@user.followers.count} followers" %>')
destroy.js.erb
$("follow_form").update("<%= escape_javascript(render('users/follow')) %>")
$("followers").update('<%= "#{@user.followers.count} followers" %>')
Я также убедился, что эта строка включена в application.html.erb
<%= javascript_include_tag :defaults %>
Если вам нужно что-то еще, чтобы оценить ситуацию, спросите, и я отвечу с обновлением.
ТИА