在ruby中动态更改数组内的方法名称

时间:2017-03-29 19:25:05

标签: ruby-on-rails ruby

我有一个用户对象,我可以这样访问.. user.email, user.first_name

现在我想循环遍历每个并基于循环中的当前键返回一条消息,就像这样。

[user.first_name, user.email, user.last_name].each do |key|
      puts "#{key} is required"
 end

上述方法有效但循环遍历values而不是fields。所以将在下面执行此操作,但如何将用户添加到键并获取数组内的值?

[first_name, email, last_name].each do |key|
 #inside here I want to prepend the user to the keys so that I can access like user.key 

 puts "#{user.key} is required" 
end

如果这是一个字符串,我们可以连接但是如何处理这个作为方法调用?

3 个答案:

答案 0 :(得分:2)

使用ActiveRecord,您可以通过[]方法访问属性:

[ :first_name, :email, :last_name ].each do |key|
  unless (user[key])
    puts "#{key} is required"
  end
end

这通常比send方法更安全,因为它不会调用任意方法。

答案 1 :(得分:1)

您可以这样做:

user.send(key)

答案 2 :(得分:-1)

[first_name, email, last_name].each do |key|
 puts user.send(key)
end