2013-01-11 76 views
1

我有一個哈希看起來像這樣:在@ object.variable的情況下,變量是否可以外推?

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

我的用戶屬性是這樣的:

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

我想檢索以下列方式在我的額外哈希定義的數據(或更好的oen - 這是我想到的那個)

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

這是可能的嗎?

回答

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

0

Object#send可以接受字符串。不知道通過@MrYoshiji提到

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

注意閱讀變量,通過方法的名稱有關try,你需要有東西創建的方法一樣attr_accessible :facebook, :twitter

相關問題