ruby-on-rails - 如何让字符串表现为变量?

标签 ruby-on-rails ruby

在 Controller 中,我有一个数组,其中包含一年中月份的简短版本:

@months = ['apr', 'may', 'jun', 'jul', 'aug', 'sep', 'aug', 'sep', 'oct', 'nov', 'dec', 'jan', 'feb', 'mar']

然后我在 Controller 中定义了变量:

@apr_direct_income = 25300
@may_direct_income = 22100

和:

@april_partner_income = 1010
@may_partner_income = 2020

在 View 中我必须显示所有这些字段,我可以做很长的路要走,但我希望通过在 Haml 中做这样的事情来稍微干一点:

- @months.each do |m|
  = "#{m}_direct_by_activation_date"

它将正确输出变量名称,但它们是以字符串形式输出的。我想让它意识到这是一个变量名,然后从 Controller 中获取值,而不是显示:

@apr_direct_income
@may_direct_income

它显示:

25300
22100

我每个月大约有十种不同类型的收入要显示,所以如果我能以这种方式将其干燥,它将把数百行重复代码变成一个非常小的页面。

最佳答案

您可以使用 instance_variable_get 获取实例变量的值,如下所示:

- @months.each do |m|
  = instance_variable_get("@#{m}_direct_income")

但是你应该考虑为此使用哈希,并将数据存储在这样的东西中:

@data = {
  april: {
    partner_income: 123,
    direct_income: 456
  }, may: {
    ...
  }
}

然后做:

- @data.each do |month, data|
  Month #{month}
  - data.each do |key, value|
    #{key} = #{value}

关于ruby-on-rails - 如何让字符串表现为变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17529983/

相关文章:

ruby - 在 Ruby on Rails 应用程序中实现匹配算法

ruby-on-rails - 与 Rails 3.2 和 SASS 一起使用的 CSS 问题

ruby-on-rails - 生产 Rake 任务无法识别我的模型

ruby-on-rails - 未知属性 rails 4

ruby-on-rails - 有什么理由在使用 Mongoid 的 Rails 中避免单词 "type"?

ruby-on-rails - 在 Rails 中,我可以在不进行 EDIT 操作的情况下修改记录吗?

ruby-on-rails - Rake 在 '*.rake' 目录中找不到 'lib/tasks' 文件

ruby-on-rails - 为自定义 omniauth 策略获取 "Authentication failure! invalid_credentials: OAuth2::Error"

ruby-on-rails - 如何为特定作业设置 max_run_time?

Ruby:动态创建新类