2015-09-28 2 views
0

Моего требования что-то вроде этого (но это не работает)магазин название модели в массиве рельсы

array=["Menu","Article","Comment"] 
array.each do |x| 
    x.find 1  #the x is of class 'string' 
    p x.id 
end 

каждые элементы массива является именем модели в моем приложении. «X», полученный внутри цикла, имеет строку класса, но я хочу, чтобы она была моделью.

Я хочу сделать одну и ту же задачу на каждой из моделей, делая что-то подобное, может уменьшить около 60 строк кода в моей программе. кто-нибудь может помочь ..

ответ

2

Вы можете использовать constantize так:

array=["Menu","Article","Comment"] 
array.each do |x| 
    klass = x.constantize 
    klass.find 1 
    p klass.id 
end 

http://apidock.com/rails/String/constantize

+0

Спасибо .. Это действительно помогло .. –

1

Вы можете сделать это следующим образом:

array=["Menu","Article","Comment"] 
array.each do |x| 
    a = (Object.const_get x).find 1 
    p a.id 
end 
+0

Это сработало для меня ..! Спасибо –

1

В ActiveSupport (часть Rails) есть представляет собой метод constantize, который можно использовать на String с, который может вам помочь:

array=["Menu","Article","Comment"] 
array.each do |x| 
    instance = x.constantize.find 1 
    p instance.id 
end 
Смежные вопросы