在Html.erb中更改Ruby变量的值

时间:2012-10-30 19:09:05

标签: html ruby-on-rails ruby ruby-on-rails-3 ruby-on-rails-3.1

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

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

3 个答案:

答案 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也会在控制器和视图中保留其值。