Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/meteor/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 从Prototype到JQuery的更改导致了双POST_Ruby On Rails_Railstutorial.org - Fatal编程技术网

Ruby on rails 从Prototype到JQuery的更改导致了双POST

Ruby on rails 从Prototype到JQuery的更改导致了双POST,ruby-on-rails,railstutorial.org,Ruby On Rails,Railstutorial.org,在MichaelHartl的第12章中,在用户的个人资料页面上有一个按钮,您可以翻转以跟随或取消跟随他/她。(见图12.12和12.13) 我使用的是rvm 1.8.6和Rails 3.1.1 当我使用Prototype时,单击按钮的行为正常工作。 在/sample_app/app/views/layouts/application.html.erb中 <%= javascript_include_tag :defaults %> 但是,在我阅读了第13章并切换到JQuery之后,

在MichaelHartl的第12章中,在用户的个人资料页面上有一个按钮,您可以翻转以跟随或取消跟随他/她。(见图12.12和12.13)

我使用的是rvm 1.8.6和Rails 3.1.1

当我使用Prototype时,单击按钮的行为正常工作。 在/sample_app/app/views/layouts/application.html.erb中

<%= javascript_include_tag :defaults %>
但是,在我阅读了第13章并切换到JQuery之后,单击follow按钮的行为导致异常并导致web服务器崩溃。 在我将/sample_app/app/views/layouts/application.html.erb修改为

<%= javascript_include_tag "application" %>
有人能帮忙吗

代码如下。 app/views/users/_follow_form.html.erb

<% unless current_user?(@user) %>
  <div id="follow_form">
  <% if current_user.following?(@user) %>
    <%= render 'unfollow' %>
 <% else %>
    <%= render 'follow' %>
  <% end %>
  </div>
<% end %>

app/views/users/_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 %>
<%= 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 %>
@user.id),
:remote=>true do | f |%>
app/views/users/_unfollow.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 %>
<%= 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 %>
{:method=>:delete},
:remote=>true do | f |%>
app/controllers/relationships_controller.rb

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
类关系控制器
app/views/relationships/create.js.erb

$("follow_form").update("<%= escape_javascript(render('users/unfollow')) %>")
$("followers").update('<%= "#{@user.followers.count} followers" %>')
$(“遵循表单”)。更新(“”)
$(“追随者”)。更新(“”)
app/views/relationships/destroy.js.erb

$("follow_form").update("<%= escape_javascript(render('users/follow')) %>")
$("followers").update('<%= "#{@user.followers.count} followers" %>')
$(“遵循表单”)。更新(“”)
$(“追随者”)。更新(“”)

我也遇到了同样的问题,包括服务器崩溃,并设法解决了它,如下所示: (请求确实发送了两次,可能是因为旧脚本) -基本上删除除application.js之外的所有js文件(应由rails new for rails 3.1生成)

此外,create.js.erb需要根据原型调整为查询:

$("#follow_form").html("<%= escape_javascript(render('users/unfollow')) %>")
$("#followers").html('<%= "#{@user.followers.count} followers" %>')
$(“#follow_form”).html(“”)
$(“#followers”).html(“”)
destroy.js.erb也是如此:

$("#follow_form").html("<%= escape_javascript(render('users/follow')) %>")
$("#followers").html('<%= "#{@user.followers.count} followers" %>')
$(“#follow_form”).html(“”)
$(“#followers”).html(“”)

之后,一切都像以前一样正常。

检查您的公用文件夹中是否有资产文件夹,其中包含application.js。不知道我是如何结束的,但这导致ajax查询被处理了两次

虽然我需要查看代码,但默认表单行为(submit)可能与js代码一样正在执行操作。尝试在处理表单提交的js代码的开头添加e.preventDefault。我已经添加了代码。您能告诉我在哪里可以添加e.preventDefault吗?在js事件处理程序中,函数(e){e.preventDefault();…}如果您使用的是Rails 3.1,那么您没有完全遵循使用Rails 3.0的教程。使用与本教程中不同的Rails版本可能会产生不同的结果。我建议使用教程中使用的确切gem版本。如果您渴望使用Rails 3.1,请参阅第13章。另一方面,目前正在准备一个全新的版本,该版本全部使用Rails 3.1。
$("#follow_form").html("<%= escape_javascript(render('users/follow')) %>")
$("#followers").html('<%= "#{@user.followers.count} followers" %>')