处理控制器操作为JS而不是HTML

所以我有以下forms:

 'profile', :action => 'follow_topic'), :remote => true do %>   'link', :onclick => "javascript:document.getElementById('followtopic#{Topic.find(topic_id).identifier}').innerHTML='Following...'" do %> Follow   

我试图让控制器将其作为JS代替HTML来处理它。 有趣的是我在应用程序中的另一个地方有一个完全像这样的表单似乎工作正常,并且控制器定义是相同的。 无法弄清楚问题所在。 关于我应该先检查什么的任何想法?

 def follow_topic @topic = Topic.find(params[:topic_id]) current_user.follows << @topic respond_to do |format| format.js end end 

除非你的format.js没有做任何事情,否则你做对了。 您在表单中提出的期望是什么? 你还期待什么呢? 一个json或http响应200?

在你的format.js中指定如下:

 ... respond_to do |format| format.js { render :nothing => true, :response => :ok if current_user.follows << @topic } end ... 

或者那种效果。

这个问题是老问题,但是没有答案,我只是在几个小时内遇到同样的问题,所以希望这将有助于将来的某些人。

确保app/assets/javascripts/application.js包含:

 //= require jquery //= require jquery_ujs 

并且该erb包含<%= javascript_include_tag "jquery", "jquery_ujs" %>而不仅仅是标记。

这就是为我解决的问题。