- 1
- 2
- 3
- 4
def properties
Hash.send :[], *(self.class.column_names & self.class::PROPERTIES).
inject([]) { |a, p| a << p.to_sym << send(p) }
end
Нашли или выдавили из себя код, который нельзя назвать нормальным, на который без улыбки не взглянешь? Не торопитесь его удалять или рефакторить, — запостите его на говнокод.ру, посмеёмся вместе!
−93
def properties
Hash.send :[], *(self.class.column_names & self.class::PROPERTIES).
inject([]) { |a, p| a << p.to_sym << send(p) }
end
это же очевидно
(self.class.column_names & self.class::PROPERTIES).inject({}) { |a, p| a[p.to_sym] = send(p);a }
Или так
res = {}
(self.class.column_names & self.class::PROPERTIES).each{ |p| res[p.to_sym] = send(p) }
res
Или так
Hash[(self.class.column_names & self.class::PROPERTIES).map{ |p| [p.to_sym,send(p)] }]
2 Похапе-хардкор
3 Hash::[] принимает *args, а не массив. Тут ему аж двумерный отправится
2. Тоже согласен.
3. Работать будет http://www.ruby-doc.org/core/classes/Hash.html#M000716
Третий вариант - код с рельс, кстати.
Но сабж конечно - жесть.