从string中访问名称的变量

时间:2013-07-04 08:44:43

标签: ruby-on-rails variables

 @result.instance_variable_get("#{@most}_max_count".to_sym)

@most是一位数字符串,例如i。此代码位给出错误

`i_max_count' is not allowed as an instance variable name

(我想要访问的是@result.i_max_count

编辑: 我想要做的是将@ result.i_max_count的值设置为某个值。

@result的类几乎是空的:

class Result < ActiveRecord::Base
    attr_accessor :least, :most
end

2 个答案:

答案 0 :(得分:0)

instance_variable_get的参数应该是有效的实例变量名:例如@i_max_count。 所以你可以稍微改变你的代码:

@result.instance_variable_get("@#{@most}_max_count".to_sym)

但是问题标记为“ruby-on-rails”,所以可能你正在使用Hash。这样你就可以尝试(对于@FrederickCheung来说):

@result["#{@most}_max_count"]

甚至这样:

@result.instance_variable_get("@attributes")["#{@most}_max_count"]

或使用eval:

eval("@rezult.#{@most}_max_count")

答案 1 :(得分:0)

实例变量名称始终必须以@ sigil开头。以下代码段显示了用法

<强> Eg

class Ankit  
 def initialize(name)
  @name = name
 end
end

<强> UPDATED:

1.9.3p392 :033 > a = Ankit.new("ankit")
 => #<Ankit:0x007fb3c39c79e8 @name="ankit"> 
1.9.3p392 :034 > a.instance_variable_get("@name")
 => "ankit"

<强> In your case check 2 things

  1. 是否设置了@i_max_count?
  2. 如果是,请使用obj.instance_variable_get("@i_max_count")