Bir find_by özelliği için birkaç yöntem oluşturmak istiyorum. Aynı şeyi tekrar tekrar yazmak istemiyorum, bu yüzden meta programlamayı kullanmak istiyorum.define_method: Bağımsız değişkenlerle yöntemler dinamik olarak nasıl oluşturulur
Ad olarak bulmak için bir argüman olarak ismini kabul etmek için bir yöntem oluşturmak istediğimi varsayalım. Bunu nasıl yaparım? Geçmişte define_method kullandım, ancak almanın yöntemi için herhangi bir argümanım yoktu. İşte benim (kötü) bir yaklaşım
["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
Herhangi bir düşünce var? Şimdiden teşekkürler.
Tümünün büyük bir veri kümesinin olup olmadığına dikkat edin, bunun performans sorunlarına neden olabileceğini unutmayın. Ayrıca içtenlikle, rayların zaten her bir özellik için 'find_by_XXX' değerini uyguladığı için rayların dışında kalmasını umuyorum. – engineersmnky
Not: Bu, 'self.find_by_name' ve' self.find_by_brand' adlı iki yöntemi tanımlayacaktır. Bu yöntemlerin oluşturulması mümkün olsa da, normal yöntem çağırma sözdizimini kullanarak bunları çağırmak imkansızdır, çünkü '.' bir tanımlayıcıda yasal bir karakter değildir. Bir yöntemi yasal olmayan bir adla tanımlamak istediğiniz belirli bir neden var mı? –
@engineersmnky Ray değil! hepsi sadece bir Oyuncak mağazasının envanter sistemi için bir 'Ürünler 'dizisi döndürür. Udacity'deki Ruby Nanodegree'nin final projesi için. –