2017-03-12 21 views
0

私はルビーとレールを初めて使っていますが、これらの2つの間でまだ混乱することがあります。オブジェクト(john.name)の後にインスタンス変数の名前を追加してインスタンス変数を呼び出そうとしましたが、その結果がJohnであることを願っています。残念ながら、NoMethodErrorが表示されます。そこで私は答えを探して、これを行うためにinstance_variable_getメソッドを使用できることを知りました。しかし、VIEWS内のオブジェクトのインスタンス変数にアクセスする場合は、RAILSでこれを行うことが可能だと思います。レールとルビのインスタンス変数へのアクセス

class Person 
    def initialize(name) 
     @name = name 
    end 
end 
john = Person.new("John") 
puts john.instance_variable_get(:@name) 
=> John 
puts john.name 
=> NoMethodError 
+0

インスタンス変数に直接アクセスすることはできません。変数は一般的に、メソッドやクラス内に閉じ込められたものの一部です。しかし、その価値を得るためには、メソッドに設定するか、 'attr_accessor'を使用してください。以下の2つの答えはあなたにどのように表示されます。 – arjun

+0

Rubyはシンプルです。すべてのオブジェクト公開はメソッドです。外部から直接インスタンス変数にアクセスすることはできません。 – Aetherus

+0

@arjun、あなたはアクセサを必要としません: 'クラスC; def初期化; @x = 1;終わり;終わり; C.new.instance_variable_get(:@ x)#=> 1'である。 –

答えて

1

使用attr_readerを設定しますどのattr_accessorを追加することができますがgetterメソッドへの追加しますクラス、この場合、

def name 
    @name 
end 

希望に役立ちます!

0

インスタンス変数にアクセスするには、メソッドを定義する必要があります。

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

    def name 
    @name 
    end 
end 

それとも、単に

attr_reader

class Person 
    attr_reader :name 

    def initialize(name) 
    @name = name 
    end 
end 

john = Person.new("John") 
john.name #=> "John" 
変数インスタンスの値を読み取るためのgetterメソッドとsetterメソッド

class Person 
    attr_accessor :name 

    def initialize(name) 
    @name = name 
    end 
end 
関連する問題