我想爲find_by特性創建一堆方法。我不想一遍又一遍地寫同樣的東西,所以我想使用元編程。define_method:如何動態創建具有參數的方法
說我想創建一個名稱查找方法,接受名稱作爲參數。我會怎麼做?我在過去使用了define_method,但是我沒有任何參數可以使用。 這是我的(壞)做法
["name", "brand"].each do |attribute|
define_method("self.find_by_#{attribute}") do |attr_|
all.each do |prod|
return prod if prod.attr_ == attr_
end
end
end
有什麼想法?提前致謝。
請注意是否所有數據都是大型數據集,這可能會導致性能問題。另外我真心希望這是在rails的上下文之外,因爲rails已經爲每個屬性實現了'find_by_XXX'。 – engineersmnky
注意:這將定義兩個名爲'self.find_by_name'和'self.find_by_brand'的方法。雖然可以創建這樣的方法,但是使用普通的方法調用語法來調用它們是不可能的,因爲'.'不是標識符中的合法字符。爲什麼要定義一個非法名稱的方法有什麼特別的理由嗎? –
@engineersmnky 這不是鐵軌!都只是爲Toy商店的庫存系統返回一個'Products'數組。這是Udacity的Ruby Nanodegree的最終項目。 –