2

我的控制器中有以下代码:

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 的值。有人可以帮我怎么做。

4

3 回答 3

3

您是否尝试过使用辅助方法?

module ApplicationHelper
  @@a = 1
  def increment_a
     @@a = @@a + 1
  end
end

在您看来,只需致电;

<% increment_a %>

并不是说@@ 变量是一个类变量,并且它在该类的所有实例之间共享。因此,在 ApplicationHelper 类的某个地方定义该类,然后它将被共享并可以在控制器和视图中访问。

在所有情况下,我都强烈反对以这种方式使用类变量,并建议您找到另一种在视图/控制器之间共享数据/变量的方式。也许使用另一个支持类或将值存储在数据库中。

于 2012-10-30T19:35:05.337 回答
0

如果您想在提交表单时更改 Rails 变量,您应该将执行此操作的代码放入处理表单的操作中。

正如您所写的,我相信在呈现包含表单的模板时会设置变量。

我还隐约记得 Rails 应用程序中的类变量有一些特殊的考虑。您应该对此进行调查并确保您使用的技术不会导致任何意外结果。

于 2012-10-30T19:31:50.400 回答
0

好的,我设法解决了这个问题:

Ruby 有一个叫做全局变量的东西,可以这样声明:

$a = 1

在任何地方使用 $a 都会在控制器和视图中保留其价值。

于 2012-10-30T19:32:42.463 回答