使用String输入引用方法或属性

时间:2012-03-08 08:31:16

标签: ruby-on-rails ruby ruby-on-rails-3

我正在编写一个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()

提前谢谢你,

1 个答案:

答案 0 :(得分:2)

你可以这样做:

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

在这种情况下,您可以创建要在城市对象上调用的方法,并通过发送

使用它