我有一个由简单的控制器处理的视图:
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时,所以这显然不会像我希望的那样更新变量。
所以我的猜测是,2没有联系。第一个在视图中有其范围,而第二个,来自increase_count方法,在我将从中呈现的任何javascript中都可见。
如何在Rails中实现这一目标?我试图实现并遇到这个问题的是以下(简化版):我有一个包含3个字符串的数组。首先我展示第一个。单击时,我想进行Ajax调用,增加索引,并显示下一个字符串。但我最后只显示了第二个,因为下一个调用不会更新索引。
答案 0 :(得分:4)
您的AJAX调用确实会更新控制器中的@index
实例变量 ,但是如果您不重新渲染链接,那么它将继续使用初始值@index
。
考虑在JavaScript模板中重新呈现链接。
E.g。
// 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);
您可能希望将链接转换为部分链接,以避免在视图和JS模板中复制代码。您还希望使用一个好的选择器来更轻松地获取链接。