目前在学校我正在尝试构建一个维基百科类型的副本应用程序,我仍然坚持如何正确使用escape_javascript方法。我有一个wiki编辑页面,如果Wiki被检查为私有,我想添加/删除协作者。现在,我正在使用ajax在没有页面刷新的情况下添加/删除协作者(这是有效的),但是我在编辑页面上实时更新协作者时遇到了问题。
这是我到目前为止所做的:
collaborators_controller.rb:
class CollaboratorsController < ApplicationController
def create
Collaborator.create(wiki_id: params[:wiki_id], user_id: params[:user_id])
render js: "$('#"+params[:user_id]+"').text('Remove');"
"$('.js-collaborators-count').html('<%= escape_javascript(render partial: 'wikis/count') %>');"
end
def destroy
collab = Collaborator.find(params[:id])
user_id = collab.user_id
collab.destroy
render js: "$('#"+user_id.to_s+"').text('Add');"
"$('.js-collaborators-count').html('<%= escape_javascript(render partial: 'wikis/count')) %>');"
end
end
_count.html.erb
<%= pluralize(@wiki.collaborators.count, 'collaborator') %>
更新
我在collaborators_controller.rb中修改了我的销毁操作,并且还创建了一个destroy.js.erb文件(我希望在我处理create.js.erb视图之前让我的destroy.js.erb视图工作)。但是,现在我不断收到以下错误,无论我参与哪一行涉及尝试更新协作者计数(您将在下面看到其他评论的尝试)。
服务器日志错误: https://gist.github.com/jlquaccia/6c2ae2661d8cc15625f6
collaborators_controller.rb:
def destroy
@collab = Collaborator.find(params[:id])
@user_id = @collab.user_id
@collab.destroy
respond_to do |format|
format.html
format.js
end
end
destroy.js.erb:
<% if @collab.destroyed? %>
$('#'+<%= @user_id.to_s %>).text('Add');
$('.js-collaborators-count').html("<%= pluralize(@wiki.collaborators.count, 'collaborator') %>");
// $('.js-collaborators-count').html("<%= escape_javascript(pluralize(@wiki.collaborators.count, 'collaborator')) %>");
// $('.js-collaborators-count').html("<%= raw escape_javascript(render partial: 'wikis/count') %>");
<% else %>
$('#'+<%= @user_id.to_s %>).prepend("<div class='alert alert-danger'><%= flash[:error] = 'Oops something went wrong..' %></div>");
<% end %>