通过本教程的这一部分,我们正在更改一个常规的表单提交按钮来使用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(:followed_id => @user.id),
:remote => true) do |f| %> <%=
f.hidden_field :followed_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 %>
如果还有其他任何事情需要评估的情况,请问,我会回应更新.
TIA
解决方法
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" %>')
(注意额外的#)它在教程的最后一章,改为导轨3.1的注释