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

@mostは、たとえば、1 桁の文字列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
4

2 に答える 2

0

instance_variable_get のパラメーターは、有効なインスタンス変数名 (@i_max_count など) である必要があります。したがって、コードを少し変更できます。

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

しかし、質問には「ruby-on-rails」というタグが付いているので、おそらくハッシュを使用しています。このようにしてそれを試すことができます(@FrederickCheungのthx):

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

またはこの方法でも:

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

または eval を使用:

eval("@rezult.#{@most}_max_count")
于 2013-07-04T09:08:36.913 に答える
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")
于 2013-07-04T09:11:00.590 に答える