gpt4 book ai didi

ruby-on-rails - Rails 在 ajax 调用同一 Controller 的方法时更新实例变量

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

我有一个由简单 Controller 处理的 View :

class CountController < ApplicationController

def count
@index = 0
end
end

在我看来,我只是添加了一个按钮:

<%= link_to "Change next day", increase_count_path(@index), :class => 'btn' :remote => true %>

该请求正在由我在 CountController 中添加的方法处理:

def increase_count
@index = params[:index].to_i + 1
end

尝试后,我发现每次请求都被发送到/increase_count/0 ,所以这显然不会像我希望的那样更新变量。

所以我的猜测是,两者没有联系。第一个在 View 中具有其作用域,而来自increase_count方法的第二个在我要从中呈现的任何javascript中都是可见的。

如何在 Rails 中实现这一目标?我试图实现并遇到的事情如下(简化版本):我有一个 3 个字符串的数组。首先我显示第一个。单击时,我想进行 Ajax 调用、递增索引并显示下一个字符串。但我最终只显示了第二个,因为接下来的调用不会更新索引。

最佳答案

您的 AJAX 调用确实会更新 Controller 内的 @index 实例变量,但是如果您不重新渲染链接,那么它将继续使用@index 的初始值。

考虑在 JavaScript 模板中重新呈现链接。

例如

// inside increase_count.js.erb

// Fetch the link in question and re-render it
// The newly rendered link will use the updated value from the instance variable within the #increase_count action

// Generates the link
// Use the j helper to escape any JavaScript within the text
var link = "<%= j link_to("Change next day", increase_count_path(@index), :class => 'btn' :remote => true) %>";

// Select the link using jQuery and update it
$("...").html(link);

您可能希望将链接转换为部分链接,以避免在 View 和 JS 模板中重复代码。您还需要使用一个好的选择器来更轻松地获取链接。

关于ruby-on-rails - Rails 在 ajax 调用同一 Controller 的方法时更新实例变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37749678/

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