【问题标题】:Changing value of Ruby Variable in Html.erb在 Html.erb 中更改 Ruby 变量的值
【发布时间】:2012-10-30 19:09:05
【问题描述】:

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

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>

所以基本上我试图在单击“下一步”按钮时更改类变量 @@a 的值。但它不会改变@@aa 的值。有人可以帮助我如何做到这一点。

【问题讨论】:

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


    【解决方案1】:

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

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

    在您看来,只需打电话;

    <% increment_a %>
    

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

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

    【讨论】:

      【解决方案2】:

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

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

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

      【讨论】:

        【解决方案3】:

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

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

        $a = 1
        

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

        【讨论】:

        • 全局变量是邪恶的,在任何包含 ruby​​ 的语言中都应该避免使用
        猜你喜欢
        • 2017-09-04
        • 1970-01-01
        • 2013-11-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-05-07
        • 1970-01-01
        • 2022-01-27
        相关资源
        最近更新 更多