gpt4 book ai didi

ruby-on-rails - 基于来自 Ajax 的实例变量动态更新页面

转载 作者:行者123 更新时间:2023-12-02 05:29:46 24 4
gpt4 key购买 nike

更新:我的问题得到了回答,但我写了一篇博文详细说明了我是如何做到这一点的: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(我的 Controller 的名称)文件夹中有一个 _test.erb 文件,其内容只有以下行:

<%= @test %>

然后在我的 Controller 中,

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不是很了解,我在谷歌的一个例子中找到了它。

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

最佳答案

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

在你的 Controller 中,告诉你的 Action 响应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})) %>")

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

关于ruby-on-rails - 基于来自 Ajax 的实例变量动态更新页面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12554296/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com