私はRubyオブジェクトUserを持っています。これには:first_nameメンバ変数があります。その変数に文字列でアクセスできるようにしたいと思います。Ruby:文字列でアクセスするメンバ変数(Reflection)
だから私は、ユーザーがuと呼ばれていた場合:
u.'first_name'
どのように私は、変数として渡された文字列を介して、u.first_nameを取得するためにリフレクションを使用することができu.first_name
に相当すべきですか?
私はRubyオブジェクトUserを持っています。これには:first_nameメンバ変数があります。その変数に文字列でアクセスできるようにしたいと思います。Ruby:文字列でアクセスするメンバ変数(Reflection)
だから私は、ユーザーがuと呼ばれていた場合:
u.'first_name'
どのように私は、変数として渡された文字列を介して、u.first_nameを取得するためにリフレクションを使用することができu.first_name
に相当すべきですか?
「メンバー変数」の意味は、first_name
という名前のモデルがあることです。もしそうなら、あなたは(質問はレールに焦点を当てているので、私は無地言う)「プレーン」Rubyのクラスでそれを行うだろうと、あなたは、その属性にアクセスすることができます。
class Foo
attr_accessor :name
def initialize(name)
@name = name
end
end
foo = Foo.new('bar')
p foo.instance_variables # [:@name]
p foo.instance_variable_get '@name' # "bar"
most idiomatic way動的にインスタンス変数を取得しますinstance_variable_get
を使用している、しかし、あなたはまた、public_send
を使用して、あなたのケースで__send__
、またはeven betterを使用してsend
、またはより良いを使用することができます。
foo = Foo.new('bar')
p foo.instance_variables # [:@name]
p foo.instance_variable_get '@name' # "bar"
p foo.send 'name' # "bar"
p foo.public_send 'name' # "bar"
Railsは、あなたのモデルを処理し、属性の道をほぼ同じ(注されていますトンを開設o版)。モデルの1つをインスタンス化することで、必要な属性を取得できます。
user = User.first
user.email # [email protected]
user.public_send 'email' # [email protected]
質問が不明です。 Rubyには「メンバ変数」はありません。グローバル変数(スレッドローカルグローバル変数とメソッドローカルグローバル変数)、定数、クラス変数、インスタンス変数、ローカル変数、および疑似変数 'self'、' nil'、 'true'、および'偽です。 'u.first_name'はメッセージ送信ですが、変数とは関係ありません。 –