我有一个看起来像这样的哈希:
extras = {'facebook' => '', 'twitter' => ''}
我的用户属性是这样的:
class User < ActiveRecord::Base
attr_accessible :facebook, :twitter, #...
我想以下列方式检索我的额外哈希中定义的数据(或者更好的oen - 这是我想到的那个)
extras.each do |k,v|
extras[k] = @user.k
end
这甚至可能吗?
答案 0 :(得分: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
答案 1 :(得分:0)
Object#send
可以带一个字符串。不确定@MrYoshiji提到的try
extras.each_key { |k| extras[k] = @user.send(k) }
请注意,要按方法名称读取变量,您需要使用attr_accessible :facebook, :twitter