Как мне заставить Ajax работать в Rails? - PullRequest
0 голосов
/ 28 февраля 2011

Я работаю над учебником по Ruby on Rails, написанным Майклом Хартлом (http://ruby.railstutorial.org/ruby-on-rails-tutorial-book)), и застреваю в точке, когда пытаюсь заставить функционировать AJAX работать.

У меня естьКнопка «Follow / Unfollow» на странице профиля пользователя, которую я хочу динамически обновлять при нажатии. Код, который я пытался реализовать, выглядит следующим образом:

* _follow.html.erb: *

<%= form_for current_user.relationships.
                          build(:followed_id => @user.id), :remote => true do |f| %>
  <div><%= f.hidden_field :followed_id %></div>
  <div class="actions"><%= f.submit "Follow" %></div>
<% end %>

* _unfollow.html.erb *

<%= form_for current_user.relationships.find_by_followed_id(@user),
             :html => { :method => :delete }, :remote => true do |f| %>
  <div class="actions"><%= f.submit "Unfollow" %></div>
<% end %>

Как видите, я использовал ': remote => true'вызовите, чтобы сказать контроллеру перейти к реализации js страницы (см. следующий код):

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
  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

По какой-то причине реальный javascript никогда не обновляется на странице - когда я смотрю в журналах этодаже говорит, что он визуализировал новый элемент ... но он не изменит вид страницы.

Есть мысли о том, что здесь происходит? Нужно ли что-то еще делать в файле конфигурации, чтобы получитьJavascript / Ajax для работы в этом приложении?

Заранее спасибо за вашпомощь!

Ответы [ 2 ]

0 голосов
/ 25 ноября 2011

Я использую Rails 3.1.1, и у меня возникла та же проблема после обучения по Rails 3.0. В обновлении версии Rails отошел от Prototype и начал использовать jQuery. Чтобы исправить старую версию JavaScript, мне пришлось обновить файл create / destroy.js.erb.

Вы можете прочитать об этом в главе 13 . Это сводится к добавлению «#» перед вашим идентификатором тега и замене вызова «.update» на «.html».

0 голосов
/ 28 февраля 2011

Вам не хватает бита, который фактически обновляет страницу.IE файл rjs.

API здесь: http://api.rubyonrails.org/classes/ActionView/Helpers/PrototypeHelper/JavaScriptGenerator/GeneratorMethods.html

Это будет иметь код типа

update_page do |page|
  page.insert_html :bottom, 'list', "<li>#{@item.name}</li>"
  page.visual_effect :highlight, 'list'
  page.hide 'status-indicator', 'cancel-link'
end

Также вы не упоминаете, какую версию рельсов используете?

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