2011-07-14 46 views
3

所以,我在Rails代码中有2个关注/取消关注窗体。这是这样的在Rails 3中渲染通过.ajax的静态部分

<%= form_tag({:controller => 'profile', :action => 'unfollow_topic' }) do %> 
    <%= hidden_field_tag :topic_id, @topic.id %> 
    <button class="question_button" type="submit">Unfollow</button> 
<% end %> 

这:

<%= form_tag({:controller => 'profile', :action => 'follow_topic' }) do %> 
<%= hidden_field_tag :topic_id, @topic.id %> 
<button class="question_button" type="submit">Follow</button> 
<% end %> 

然后,我有这样的javascript代码:

<script type="text/javascript"> 
    $(function(){ 
    $('#follow form').submit(function(e) { 
     $.ajax({ 
     url: this.action, 
     type: 'POST', 
     data: $(this).serialize(), 
     success: function(response){ $('#follow').html(response); } 
     }); 
    return false; 
    }); 
    }); 
</script> 

我的问题是如何从我的控制器返回相应的“跟随/ unfollow“部分用于替换返回的响应。

我现在拥有的是这一点,但它似乎并不工作:

respond_to do |format| 
    format.html { redirect_to('/' + topic.type + '/' + topic.uri) } 
    format.js { render :partial => 'unfollow_topic' } 
    end 

但是相反,如果使整个页面,我相信它的实际响应format.html而不是格式。 js有什么想法?

+0

什么是你 '_unfollow_topic.js.erb' 文件?你试过剥离他们的一切,只是把一些警报的JavaScript? '警报(“你好!”);'这可能会告诉你,如果你甚至让你的部分回来。 – ipd

+0

ajax请求通常用于更新页面的一部分正如我从你的问题所理解的,你想用ajax请求更新整个页面它是正确的吗? – Bohdan

+0

也请发布您的日志与此请求的大块 – Bohdan

回答

5

的JavaScript:

<script type="text/javascript"> 
     $(function(){ 
     $('#follow form').submit(function(e) { 
      $.ajax({ 
      url: this.action, 
      type: 'POST', 
      data: $(this).serialize(), 
      dataType: 'html' 
      success: function(response){ $('#follow').html(response); } 
      }); 
     return false; 
     }); 
     }); 
    </script> 

控制器:

respond_to do |format| 
    format.html do 
     if request.xhr? 
     render :partial => 'unfollow_topic' 
     else 
     redirect_to('/' + topic.type + '/' + topic.uri) 
     end 
    end 
end 
+0

为我工作,谢谢=) –

+0

thx乔尼为我工作:) –