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

时间:2011-08-08 03:58:31

标签: ruby-on-rails

所以我有以下表格:

<%= form_tag url_for(:controller => 'profile', :action => 'follow_topic'), :remote => true do %>
  <%= hidden_field_tag :topic_id, topic_id %>
  <%= content_tag :button, :class => 'link', :onclick => "javascript:document.getElementById('followtopic#{Topic.find(topic_id).identifier}').innerHTML='Following...'" do %> Follow <% end %>
<% end %>

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

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

2 个答案:

答案 0 :(得分:0)

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

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

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

或者那种效果。

答案 1 :(得分:0)

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

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

//= require jquery
//= require jquery_ujs 

该erb包含<%= javascript_include_tag "jquery", "jquery_ujs" %>而不仅仅是<script>代码。

这就是为我解决的问题。