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 回答