0

Consider the following code:

I receive an object from datamapper which contains Values from my select:

user = User.first()
puts user.name
# John
puts user.surname
# Doe
puts user.age
# 42

In a user defined Array I have an Order for these Values to be displayed

dataordering = ["age", "surname", "name"]

So how do I get my values ordered as in my Array?

dataordering.each do |sequence|
  puts user.sequence
  # this, of course, fails
end

I don't want to use eval(). nope.

Maybe there's even a better way to store an ordering of values?

witsches
  • 227
  • 2
  • 3
  • 7

1 Answers1

1

You can pick values from record this way:

user_attributes = user.attributes

dataordering.each do |attribute|
  puts user_attributes[attribute.to_sym]
end

Or use send method:

dataordering.each do |attribute|
  puts user.send attribute.to_sym
end

As an ordering solution, I can offer you this code:

dataordering.map { |attr| user.send attribute.to_sym }
Flexoid
  • 4,155
  • 21
  • 20