2011-08-08 44 views
4

所以我有以下形式:處理控制器動作爲JS,而不是HTML

<%= 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 

回答

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 
... 

或諸如此類的話。

+0

我已經添加了render:nothing => true,:response =>:ok,它仍然以HTML格式處理並將頁面重定向到/ profile/follow_topic。 –

+0

如果您將'format.js'留空,它*應該*渲染一個javascript模板。在這種情況下,'follow_topic.js.erb'。 – Mischa

+0

所以,我不認爲空'format.js'是問題。 – Mischa

0

這個問題是舊的,但它沒有答案,我只是同樣的問題掙扎幾個小時,所以希望這將有助於未來的人。

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

//= require jquery 
//= require jquery_ujs 

這ERB包含<%= javascript_include_tag "jquery", "jquery_ujs" %>,而不僅僅是一個<script>標籤。

這是什麼修復了我。

相關問題