基于从阿贾克斯一个实例变量动态更新页面(Dynamically update page based

2019-09-22 20:58发布

更新:我的问题得到回答,但我写了一篇博客,详细说明究竟我如何着手这样做: http://lathamcity.com/posts/ajaxInRails.html

我有一个页面,显示的基于Ruby对象的事情的清单。 我的目标是做一个Ajax调用来获取一个新的Ruby对象,然后更新基于该列表。

我认为这样做,这是用谐音。 我使整个列表,在代码中的Rails的实例变量的部分文件。 然后我想在Ajax调用相应的实例变量设置为新的列表,并重新渲染部分。

这是最终目标,但现在我想做的是,我只是设置一个实例变量为一个字符串一个很基本的版本,然后显示的字符串。

所以在我的div,我有:

<% form_tag :action => :go , :method => :get, :remote => true  do %>
    <%= submit_tag "Go" %>
<% end %>

<div id="test"><%= render(:partial => 'test') %></div>

有一个在一个_test.erb文件views/interface文件夹(我的控制器的名称),只有下面一行的内容:

<%= @test %>

然后在我的控制器,

def go
    @test = "Hello You"
    render :update do |page|
        page.replace_html "test", :partial => "test"
    end
end

当我跑,我得到: Missing template interface/update, application/update

我不知道很多关于render :update ,我发现它在谷歌上的例子。

我在做什么错,是造成这个问题,我该如何解决? 我要对这个正确的方式还是有更好的方式来做到这一点?

Answer 1:

我认为无论是render :updatereplace_html被弃用/中轨3.1去除。 做部分更新的标准方法是使用js.erb模板。

在您的控制器,告诉你的行动,以JS请求作出回应:

@test = "Hello you"
respond_to do |format|
    format.js
end

创建JS响应模板的应用程序/视图/接口/ go.js.erb:

$('#test').html("<%= escape_javascript(render('test', test: @test})) %>")

并改变局部代码<%= test %>因为这是不再一个实例变量; 相反,测试被传递给所述部分从与所述js.erb模板的参数test: @test



文章来源: Dynamically update page based on an instance variable from Ajax