2012-03-08 207 views
0

我正在写一个rails函数,它可以将Car或Building对象添加到City对象。使用字符串输入引用方法或属性

该功能的第一部分是创建具有给定名称的汽车或建筑物对象,然后将其附加到城市的汽车或建筑物列表中。

def addObject(obj_type,obj_name,city_id) 
    new_obj = obj_type.constantize.create(:name => obj_name) 
    city = City.find(city_id) 

    city.obj_type.underscore.pluralize << new_obj 
end 

随着Inflector,程序可以使用constantize引用期望的模型类。

(感谢Referencing Model with String input

如:

new_obj = obj_type.constantize.create(:name => obj_name) 

但是,试图访问City物体内部的名单,

obj_type.underscore.pluralize 

可以把 “汽车” 到“汽车时, “

然而,它只会像第E按照行不通:

city.obj_type.underscore.pluralize #city.cars desired 

将某种类型的元编程功能,如eval()需要?

谢谢你在前进,

+1

你见过'变形器#tableize'? – Eric 2012-03-08 08:59:11

+0

似乎与'Inflector#underscore'和'Inf​​lector#pluralize'一起做同样的事情。感谢您指出它! – rickypai 2012-03-08 10:15:08

回答

2

你可以这样做:

city.send(obj_type.underscore.pluralize) << new_obj 

在这种情况下,你创建你想叫你的城市客体和发送使用它的方法

+0

谢谢。这完美的作品! – rickypai 2012-03-08 08:41:18

相关问题