[英]Ajax form not rendering partial
我正在嘗試實現關注/取消關注表單來創建/銷毀用戶與站點上的公司之間的關系。 我在呈現表單提交中的新部分時遇到問題,要將關系按鈕從“關注”更改為“取消關注”
目前,我根據是否存在關系來渲染不同的部分:
`<% unless current_user.id == @company.user_id %>
<div id="#relationship">
<% if current_user.following?(@company) %>
<%= render :partial => 'unfollow' %>
<% else %>
<%= render :partial => 'follow' %>
<% end %>
</div>
<% end %>`
以下部分看起來像:
<%= form_for(current_user.relationships.build(followed_id: @company.id), remote: true) do |f| %>
<div><%= f.hidden_field :followed_id %></div>
<%= f.submit "Follow",class: "btn-transparent btn-hollow btn-huge" %>
<% end %>
雖然取消關注部分看起來像:
<%= form_for(current_user.relationships.find_by(followed_id: @company.id), html: { method: :delete }, remote: true) do |f| %>
<%= f.submit "Unfollow", class: "btn-transparent btn-hollow btn-huge" %>
<% end %>
這些在我的Relationships_Controller中使用Create和Destroy方法:
class RelationshipsController < ApplicationController
before_filter :authenticate_user!
def create
@company = Company.find(params[:relationship][:followed_id])
current_user.follow!(@company)
respond_to do |format|
format.html { redirect_to @company }
format.js {render layout: false}
end
end
def destroy
@company = Relationship.find(params[:id]).followed
current_user.unfollow!(@company)
respond_to do |format|
format.html { redirect_to @company }
format.js{render layout: false}
end
end
end
如果我將remote設置為false,則窗體將按預期工作,創建並銷毀關系,並且在重新加載頁面時按鈕會更改。 當我嘗試通過設置remote:true來使用AJAX時,將以下代碼用於Relationships / create.js.erb和Relationships / destroy.js.erb
$("#relationship").html("<%= j render('companies/unfollow') %>");
$("#relationship").html("<%= j render('companies/follow') %>");
但是,現在,當我重新加載頁面時-我可以單擊一次按鈕來創建/銷毀關系對象。 如果再次單擊,則會出現500錯誤。 永遠不會加載新的部分。
盡管我有點菜鳥,但出現此錯誤似乎使我指向chrome dev工具中jquery源中的這一行:
xhr.send( ( options.hasContent && options.data ) || null );
我正在使用Rails 4,Jquery-Turbolinks和Devise-如果其中任何一個與問題沒有任何關系。
現在令人沮喪的是,如果有人可以幫助,將不勝感激!
更新
日志輸出如下。 第一個DELETE表示已經渲染了我的局部圖像,但是還沒有。 第二個DELETE是第二次單擊取消關注時發生的事情-它正確地指出,具有該ID號的Relationship不再存在,因為在第一個操作中已將其刪除。
Started DELETE "/relationships/429" for 127.0.0.1 at 2014-10-28 14:34:59 +0000
Processing by RelationshipsController#destroy as JS
Parameters: {"utf8"=>"✓", "commit"=>"Unfollow", "id"=>"429"}
[1m[36mUser Load (1.0ms)[0m [1mSELECT "users".* FROM "users" WHERE "users"."id" = 1 ORDER BY "users"."id" ASC LIMIT 1[0m
[1m[35mRelationship Load (0.4ms)[0m SELECT "relationships".* FROM "relationships" WHERE "relationships"."id" = $1 LIMIT 1 [["id", 429]]
[1m[36mCompany Load (0.3ms)[0m [1mSELECT "companies".* FROM "companies" WHERE "companies"."id" = $1 LIMIT 1[0m [["id", 1]]
[1m[35mRelationship Load (0.3ms)[0m SELECT "relationships".* FROM "relationships" WHERE "relationships"."follower_id" = $1 AND "relationships"."followed_id" = 1 LIMIT 1 [["follower_id", 1]]
[1m[36m (0.2ms)[0m [1mBEGIN[0m
[1m[35mSQL (3.6ms)[0m DELETE FROM "relationships" WHERE "relationships"."id" = $1 [["id", 429]]
[1m[36m (0.5ms)[0m [1mCOMMIT[0m
Rendered companies/_follow.html.erb (2.5ms)
Rendered relationships/destroy.js.erb (5.3ms)
Completed 200 OK in 19ms (Views: 7.0ms | ActiveRecord: 6.3ms)
Started DELETE "/relationships/429" for 127.0.0.1 at 2014-10-28 14:35:04 +0000
Processing by RelationshipsController#destroy as JS
Parameters: {"utf8"=>"✓", "commit"=>"Unfollow", "id"=>"429"}
[1m[35mUser Load (0.9ms)[0m SELECT "users".* FROM "users" WHERE "users"."id" = 1 ORDER BY "users"."id" ASC LIMIT 1
[1m[36mRelationship Load (0.3ms)[0m [1mSELECT "relationships".* FROM "relationships" WHERE "relationships"."id" = $1 LIMIT 1[0m [["id", 429]]
Completed 404 Not Found in 4ms
ActiveRecord::RecordNotFound - Couldn't find Relationship with 'id'=429:
您的ID名稱中包含一個哈希。
嘗試改變
<div id="#relationship">
至
<div id="relationship">
當使用remote: true
您必須更改:
format.js{render layout: false}
同
format.js
否則:您永遠不會呈現relationships/create.js.erb
和relationships/destroy.js.erb
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.