【问题标题】:Dynamically update page based on an instance variable from Ajax基于来自 Ajax 的实例变量动态更新页面
【发布时间】:2012-09-23 17:00:21
【问题描述】:

更新:我的问题已得到解答,但我写了一篇博文详细说明了我是如何做到这一点的: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>

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

<%= @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,我在 Google 的一个示例中找到了它。

我做错了什么导致了这个问题,我该如何解决?我这样做是正确的还是有更好的方法?

【问题讨论】:

    标签: ruby-on-rails ajax partial


    【解决方案1】:

    我认为 render :updatereplace_html 在 rails 3.1 中已被弃用/删除。进行部分更新的标准方法是使用 js.erb 模板。

    在您的控制器中,告诉您的操作以响应 js 请求:

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

    创建js响应模板app/views/interface/go.js.erb:

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

    并将部分代码更改为&lt;%= test %&gt;,因为这不再是实例变量;相反, test 被作为来自 js.erb 模板的参数传递给部分 test: @test

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-02-05
      • 1970-01-01
      • 2016-10-22
      • 2021-09-07
      • 1970-01-01
      • 2011-01-30
      • 1970-01-01
      • 2018-06-23
      相关资源
      最近更新 更多