【问题标题】:How do I get Ajax working in Rails?如何让 Ajax 在 Rails 中工作?
【发布时间】:2011-02-27 22:32:07
【问题描述】:

我正在阅读 Michael Hartl 的 Ruby on Rails 教程 (http://ruby.railstutorial.org/ruby-on-rails-tutorial-book),但我陷入了困境试图让 AJAX 功能正常工作。

我在用户个人资料页面上有一个“关注/取消关注”按钮,我希望在单击该按钮时动态更新该按钮。我尝试实现的代码如下:

*_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 为该应用程序工作?

提前感谢您的帮助!

【问题讨论】:

标签: javascript ruby-on-rails ajax


【解决方案1】:

您缺少实际更新页面的位。即 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

您也没有提及您使用的是什么版本的导轨?

【讨论】:

  • 感谢您的留言 - 我使用的是 Rails 3.0.3。就 rjs 文件而言 - 我有一个 js.erb 文件,我认为应该更新页面,但它似乎不起作用。代码是: create.js.erb: $("follow_form").update("") $("followers").update(' ') 我会查看您在上面记下的 API 链接。希望那里的东西会让事情变得点击。再次感谢!
  • 您使用默认的 javascript 库和 rails 3?还是 jQuery api?
  • 一般来说你的代码看起来是正确的。我建议使用 firebug 来检查来自 ajax 调用的响应,你试过吗?你知道吗?
【解决方案2】:

我使用 Rails 3.1.1 并在 Rails 3.0 教程之后遇到了同样的问题。在版本更新中,Rails 已从 Prototype 移出并开始使用 jQuery。要更正旧版本的 javascript,我必须更新 create/destroy.js.erb。

您可以在chapter 13 中了解它。它归结为在您的标签 ID 前添加一个“#”,并将“.update”调用替换为“.html”。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-09
    • 2011-06-19
    • 1970-01-01
    • 1970-01-01
    • 2010-11-16
    相关资源
    最近更新 更多