我正在编写一个rails函数,它可以将Car或Building对象添加到City对象。
该功能的第一部分是创建具有给定名称的Car或Building对象,然后将其附加到城市的汽车或建筑物列表中。
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
可以将“Car”变成“汽车”
但是,它只能作为一个裸字符串,因为以下操作不起作用:
city.obj_type.underscore.pluralize #city.cars desired
是否需要某种元编程功能,例如eval()
?
提前谢谢你,
答案 0 :(得分:2)
你可以这样做:
city.send(obj_type.underscore.pluralize) << new_obj
在这种情况下,您可以创建要在城市对象上调用的方法,并通过发送
使用它