2012-03-08 10 views
0

CityオブジェクトにCarオブジェクトまたはBuildingオブジェクトを追加できるrails関数を記述しています。文字列入力によるメソッドまたはプロパティの参照

関数の最初の部分は、指定された名前のCarオブジェクトまたはBuildingオブジェクトを作成し、それを都市または車のリストに追加することです。 Inflector

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 

、プログラムは、所望のモデルクラスを参照する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

でそれを使用するメソッドを作成するには、見たことがあります'Inflector#tableize'? – Eric

+0

「Inflector#underscore」と「Inflector#pluralize」と同じことをしているようです。しかし、それを指摘してくれてありがとう! – rickypai

答えて

2

ありがとう:この場合

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

をあなたはあなたの街のオブジェに呼び出し、送信

+0

ありがとうございます。これは完全に動作します! – rickypai

関連する問題