Ich habe eine Menge Leute mit dem gleichen Problem, das ich habe, aber keine der Lösungen für meine Situation gelten. Ich folge Michael Hartl's tutorial here. Ich habe ein Folgesystem gemäß Kapitel 14 eingerichtet (ich verwende die neueste Ausgabe des Buches, da ich auf Rails 5.1 bin). Die Follow/Unfold-Schaltfläche wird in der Datenbank verarbeitet, aber ich muss die Seite manuell aktualisieren, um die Schaltfläche zu sehen und die Zähleränderung zu verfolgen.AJAX-Taste Prozesse, ändert sich nicht
bekomme ich diese im Browser Konsolenprotokoll:
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
views/users/_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/Benutzer/_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 %>
views/users/_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 %>
Beziehungen/create.js.erb
$("#follow_form").html("<%= escape_javascript(render('users/unfollow')) %>");
$("#followers").html('<%= @user.followers.count %>');
Beziehungen/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
Was mache ich falsch?
Warum denken Sie, sollte es den Knopf ändern? Wo ist das 'onclick()' Javascript-Ereignis? Was bedeutet "zurück" in diesem? 'redirect_to (: zurück)' Versuchen Sie 'redirect_to user_path (@user)' oder welche Seite Sie gerade betrachten, dann wird die Seite neu geladen. Warum sagst du AJAX in deinem Titel, aber es gibt keine AJAX-Aufrufe ('$ .post()') in deiner Frage? Zeigen Sie das JS dafür. – Chloe
Haben Sie jquery_ujs eingeschlossen? –
Ich habe jquery_ujs in meiner Datei application.js benötigt. – ddonche