Rails 3,通过ajax渲染局部视图

时间:2014-04-25 09:54:23

标签: javascript jquery ruby-on-rails ruby ajax

我正在使用mailboxer gem制作电子邮件服务。 在我的索引视图中,我有几个链接将导致收件箱/草稿...像这样:

<%= link_to "Inbox", show_conversations_path, :remote => true %>
...
<div id="content">
</div>

然后是我的show_conversation js.erb

$("#content").html("<%=escape_javascript(render :partial=>"show_conversations")%>");

控制器(messages_controller)

def show_conversations
  @inbox = current_user.mailbox.inbox
  respond_to do |format|       
    format.js  
  end
end

还有部分视图_show_conversations.html.erb(已经过测试,通过简单的渲染,因此没有错误)。

所以我的问题是,当我点击链接时,它实际上会重定向到一个空白的标记(当它不应该,或者至少它不是我的意图,重定向,只显示内容格)。

我已经意识到它实际上渲染了它的控制器,然后是erb.js,局部视图,而且我不知道为什么再次使用控制器,但这次是HTML。

一段日志:

Started GET "/en/messages/show_conversations"4
Processing by MessagesController#show_conversations as JS
...
  Rendered messages/_show_conversations.html.erb (7962.4ms)
  Rendered messages/show_conversations.js.erb (23239.0ms)
Completed 200 OK in 23330ms (Views: 23237.9ms | ActiveRecord: 5.0ms)

Started GET "/en/messages/show_conversations
Processing by MessagesController#show_conversations as HTML
Completed 406 Not Acceptable in 8ms (ActiveRecord: 0.5ms)

我知道它不应该重定向,我相信它不应该两次调用控制器(而第二个就好像它是html而不是js),但我不知道我真的知道它为什么会发生,也没有通过论坛找到类似的问题

2 个答案:

答案 0 :(得分:0)

使用以下代码检查是否有效

def show_conversations
 @inbox = current_user.mailbox.inbox
 respond_to do |format|       
   format.js { render :layout => false }
 end
end

答案 1 :(得分:0)

尝试修改此行:

$("#content").html("<%=escape_javascript(render :partial=>"show_conversations")%>");

为:

$("#content").html("<%= escape_javascript(render :partial=>'show_conversations') %>");

或使其漂亮:

$("#content").html("<%= j render :partial=>'show_conversations' %>");