我的控制器中有以下代码:
class TestController < ApplicationController
@@a = 1
def index
@temp = connection.execute("select test_id from mastertest limit #{@@a}, 5;")
end
我在View(Html.erb)文件中有以下代码:
<button type="submit" value="Next" form="submit_form">NEXT</button>
<form id="submit_form">
<% @@a = @@a + 1 %>
<table>
<% @temp.each do |row| %>
<tr><td><%= row[0] %></td></tr>
<% end %>
</table>
</form>
所以基本上我试图在单击Next按钮时更改类变量@@ a的值。但它并没有改变@@ aa的价值。有人可以帮我怎么做。
答案 0 :(得分:3)
您是否尝试使用辅助方法?
module ApplicationHelper
@@a = 1
def increment_a
@@a = @@a + 1
end
end
并在您的视图中调用;
<% increment_a %>
不是@@变量是一个类变量,而是在该类的所有实例之间共享。因此,在ApplicationHelper类中的某个地方定义该类,然后它将被共享,并且可以在控制器和视图中访问。
在所有情况下,我都非常不鼓励以这种方式使用类变量,并建议您使用另一种方式在视图/控制器之间共享数据/变量。也许在数据库中使用另一个支持类或存储值。
答案 1 :(得分:0)
如果要在表单提交时更改Rails变量,则应将代码放在处理表单的操作中。
正如您所写,我相信当呈现包含表单的模板时,变量将被设置。
我还模糊地回忆起在Rails应用程序中对类变量有一些特殊的考虑。你应该研究一下,确保你使用的技术不会产生任何意想不到的结果。
答案 2 :(得分:0)
好的,我设法解决了这个问题:
Ruby有一个叫做全局变量的东西,可以像这样声明:
$a = 1
在任何地方使用$ a也会在控制器和视图中保留其值。