rails - 加载另一页并替换div

时间:2014-01-22 12:41:51

标签: jquery html ruby-on-rails ajax

经过一番挣扎,我设法让ajax工作:

hello.js.erb:

$("#show_hosts").html("some text");

testQueuesController.rb:

class testQueuesController < ApplicationController

  def index

    @test_queues = testQueue.all

    respond_to do |format|

      format.html

      format.json { render json: @test_queues }

    end

  end

end

视图中的相关部分:

<%= link_to "hello", { :controller => "kashmir_queues", :action => "hello" }, :remote => true %>

现在,这是有效的,但我真正想做的是,现在加载“一些文本”,但要加载另一个名为show_hosts.html.erb的视图,我该怎么办呢?

谢谢!

2 个答案:

答案 0 :(得分:0)

如果我正确理解您的问题,您希望在ID为show_hosts.html.erb的HTML代码中呈现名为show_hosts的视图。

为了能够做到这一点,你需要为每个主机创建一个部分 - 比如_host.html.erb,并在hello.js.erb中写下以下内容:

$('#show_hosts').html(<%= render partial: 'host', collection: @hosts %>)

其中@hosts是我假设你用于show_hosts.html.erb中显示的主机集合的名称,但我必须承认我有点困惑,因为你使用{{1}在您的控制器中。

对于它的价值(如果我没记错),您还需要将@test_queues添加到控制器以呈现format.js模板。

答案 1 :(得分:0)

在你的控制器中添加名为hello的新动作

def hello
 queue = KashmirQueue.find(params[:id]) 
 @test_queues = testQueue.where(:host => queue.host) 
end

将show.html.erb移动到像_show.html.erb

这样的部分

然后在hello.js.erb中写

$("#show_hosts").html('#{escape_javascript(render "show.html.erb")}');