【发布时间】:2017-10-29 03:32:14
【问题描述】:
我发现很多人都有同样的问题,但没有一个解决方案适用于我的情况。我关注Michael Hartl's tutorial here。我按照第 14 章设置了一个跟随系统(我使用的是本书的最新版本,因为我使用的是 Rails 5.1)。数据库中的关注/取消关注按钮处理,但我必须手动刷新页面才能看到按钮和关注计数变化。
我在浏览器控制台日志中得到了这个:
POST 500 (Internal Server Error)
jquery.self-bd7ddd393353a8d2480a622e80342adf488fb6006d667e8b42e4c0073393abee.js:10255
send @ jquery.self-bd7ddd393353a8d2480a622e80342adf488fb6006d667e8b42e4c0073393abee.js:10255
ajax @ jquery.self-bd7ddd393353a8d2480a622e80342adf488fb6006d667e8b42e4c0073393abee.js:9739
ajax @ jquery_ujs.self-784a997f6726036b1993eb2217c9cb558e1cbb801c6da88105588c56f13b466a.js:94
handleRemote @ jquery_ujs.self-784a997f6726036b1993eb2217c9cb558e1cbb801c6da88105588c56f13b466a.js:179
(anonymous) @ jquery_ujs.self-784a997f6726036b1993eb2217c9cb558e1cbb801c6da88105588c56f13b466a.js:512
dispatch @ jquery.self-bd7ddd393353a8d2480a622e80342adf488fb6006d667e8b42e4c0073393abee.js:5227
elemData.handle @ jquery.self-bd7ddd393353a8d2480a622e80342adf488fb6006d667e8b42e4c0073393abee.js:4879
relationships_controller.rb:
class RelationshipsController < ApplicationController
before_action :authenticate_user!
def create
user = User.find(params[:followed_id])
current_user.follow(user)
respond_to do |format|
format.html { redirect_to(:back) }
format.js
end
end
def destroy
user = Relationship.find(params[:id]).followed
current_user.unfollow(user)
respond_to do |format|
format.html { redirect_to(:back) }
format.js
end
end
end
视图/用户/_follow.html.erb:
<%= form_for(current_user.active_relationships.build, remote: true) do |f| %>
<div><%= hidden_field_tag :followed_id, @user.id %></div>
<%= f.submit "Follow", class: "btn btn-primary" %>
<% end %>
views/users/_unfollow.html.erb
<%= form_for(current_user.active_relationships.find_by(followed_id: @user.id),
html: { method: :delete }, remote: true) do |f| %>
<%= f.submit "Unfollow", class: "btn" %>
<% end %>
视图/用户/_follow_form.html.erb
<% if current_user != @user %>
<div id="follow_form">
<% if current_user.following?(@user) %>
<%= render 'unfollow' %>
<% else %>
<%= render 'follow' %>
<% end %>
</div>
<% end %>
relationships/create.js.erb
$("#follow_form").html("<%= escape_javascript(render('users/unfollow')) %>");
$("#followers").html('<%= @user.followers.count %>');
relationships/destroy.js.erb
$("#follow_form").html("<%= escape_javascript(render('users/follow')) %>");
$("#followers").html('<%= @user.followers.count %>');
users_controller.rb
class UsersController < ApplicationController
before_action :authenticate_user!, only: [:index, :edit, :update, :destroy,
:following, :followers]
def index
@page_title = "Forge Users"
@users = User.all
end
def show
@user = User.find(params[:id])
@posts = Post.all
end
def following
@title = "Following"
@user = User.find(params[:id])
@users = @user.following
render 'show_follow'
end
def followers
@title = "Followers"
@user = User.find(params[:id])
@users = @user.followers
render 'show_follow'
end
end
我做错了什么?
【问题讨论】:
-
为什么你认为它应该改变按钮?
onclick()Javascript 事件在哪里?:back在这里面去什么?redirect_to(:back)尝试redirect_to user_path(@user)或您正在查看的任何页面,然后它将重新加载该页面。为什么您的标题中说 AJAX,但您的问题中没有 AJAX 调用 ($.post())?为此显示 JS。 -
你包含 jquery_ujs 了吗?
-
我的 application.js 文件中需要 jquery_ujs。
-
Chloe,当表单被处理时,关系控制器应该做所有的 js 工作(调用 create.js 和 destroy.js)。我错了吗?
-
浏览器调试控制台的“网络”选项卡中是否出现任何服务器错误?控制台选项卡中的任何错误怎么办?您不需要
format.js中的render吗?
标签: javascript jquery ruby-on-rails ruby ajax