在@ object.variable的情况下,可以外推变量吗?

时间:2013-01-11 19:40:15

标签: ruby-on-rails ruby

我有一个看起来像这样的哈希:

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

我的用户属性是这样的:

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

我想以下列方式检索我的额外哈希中定义的数据(或者更好的oen - 这是我想到的那个)

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

这甚至可能吗?

2 个答案:

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

之类的方法创建该方法