我正在阅读Michael的Rails教程,在第12.2.5节中遇到了一个小问题,我们应该用Ajax创建一个工作按钮。我知道代码是正确的(我最终直接从书中复制它,并再次输入它三次),我是绿色的。但实际上不起作用!
通过本教程的这一部分,我们将更改一个常规的表单提交按钮来使用Ajax,这样整个页面就不会“刷新”(实际上,重定向到同一个页面),而只是按钮和相应的侧栏项更新。问题是按钮不会像我期望的那样在点击时自动重新加载。它确实在页面刷新时重新加载。如果我在浏览器中禁用JS,它会像应该的那样恢复到触发重定向和“刷新”整个页面的HTML版本。如果你想知道,我尝试过刷新页面,我也尝试过Firefox,Safari和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. )编译( :followed_id => @user.id),:remote => true) <%= f.submit“跟随”%> <% end %>
_unfollow.html.erb:
<%= form_for(current_user.relationships.find_by_followed_id(@user),
:html => { :method => :delete },
:remote => true) do |f| %><%结束%>
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 %>如果您还有什么需要评估的情况,请询问,我会提供最新的答复。
提亚
发布于 2012-01-23 16:59:25
您使用的是什么版本的rails?如果它的3.1,你必须改变
create.js.erb到:
$("#follow_form").html("<%= escape_javascript(render('users/unfollow')) %>")
$("#followers").html('<%= "#{@user.followers.count} followers" %>')和destroy.js.erb到:
$("#follow_form").html("<%= escape_javascript(render('users/follow')) %>")
$("#followers").html('<%= "#{@user.followers.count} followers" %>')(请注意额外的#)它在本教程的最后一章,改为rails 3.1的注释
发布于 2011-11-16 14:48:13
将<%= javascript_include_tag :defaults %>更改为application.html.erb文件中的<%= javascript_include_tag 'prototype' %>,这为我解决了这个问题。
见链接:
12
发布于 2011-11-25 15:36:54
我使用Rails 3.1.1,在Rails 3.0教程中也有同样的问题。在版本中,更新Rails已经脱离了原型,并开始使用jQuery。要更正javascript的旧版本,我必须更新create/deady.js.erb。
你可以在第13章上读到它。它归结为在标记id前面添加一个"#“,并将".update”调用替换为".html“。
https://stackoverflow.com/questions/6156815
复制相似问题