我發現很多人都遇到了同樣的問題,但沒有一個解決方案適用於我的情況。我正在關注Michael Hartl's tutorial here。我有一個按照第14章設置的跟蹤系統(我使用本書的最新版本,因爲我在Rails 5.1上)。數據庫中的follow/unfollow按鈕進程,但我必須手動刷新頁面以查看按鈕並按照計數更改。AJAX按鈕流程不會更改
我得到這個在瀏覽器控制檯日誌:
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 %>
的意見/ 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 %>
關係/ create.js.erb
$("#follow_form").html("<%= escape_javascript(render('users/unfollow')) %>");
$("#followers").html('<%= @user.followers.count %>');
關係/ 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。 – Chloe
你包括jquery_ujs嗎? –
我的application.js文件中需要jquery_ujs。 – ddonche