1

次のようなハッシュがあります。

extras = {'facebook' => '', 'twitter' => ''}

そして、私のユーザー属性は次のようになります:

class User < ActiveRecord::Base
  attr_accessible :facebook, :twitter, #...

次の方法でエクストラハッシュで定義されたデータを取得したいと思います(またはより良い方法-それが私の頭に浮かんだものです)

extras.each do |k,v|
    extras[k] = @user.k
end

これは可能ですか?

4

2 に答える 2

7

はい、.send(:method)またはでそれを行うことができます.try(:method)

# with this kind of hash:
extras = {'facebook' => '', 'twitter' => ''}

これを行うと、ユーザーの情報を収集できます。

extras.each_key do |key|
  extras[key] = @user.send(key.to_sym)      
end

または、.try()より安全なを使用すると、不明なキーがユーザーに送信された場合にNoMethodError が発生しません。

extras.each_key do |key|
  extras[key] = @user.try(key.to_sym)
end

マップでもそれを行うことができます:

extras.each_key{ |k| extras[k] = @user.send(k.to_sym) }

このコードについて投稿しました。ここで見ることができます: http://rails.co.nf/?p=31

于 2013-01-11T19:48:31.140 に答える
0

Object#send文字列を取ることができます。try@MrYoshijiによる言及についてはよくわかりません

extras.each_key { |k| extras[k] = @user.send(k) }

メソッド名で変数を読み取るには、そのメソッドを次のようなもので作成する必要があります。attr_accessible :facebook, :twitter

于 2013-01-11T20:55:36.100 に答える