Ustawienie domyślnych atrybutów w obiekcie tworzonym za pomocą factory

klasy A,B,C,D dziedziczą po klasie X, obiekty tych klas tworzę za pomocą kodu w klasie X

def self.factory(class_name, params) if defined? class_name.constantize return class_name.constantize.new(params) end end
Przykładowe wywołanie

@a = X.factory('A', params[:aaa])

Chciałbym przykładowo dla klasy A ustawić pewnien atrybut domyślnie, próbowałem coś takiego w klasie A

def initialize super self.costam = 1 end
Ale dostaje:

wrong number of arguments (1 for 0)

def initialize(attrs = {}) super(attrs) self.costam = 1 end
W new przekazujesz hasha z atrybutami, więc jeżeli jawnie deklarujesz initialize, to też musisz takiego hasha obsłużyć.

Przy okazji.

Nie łatwiej jest pozbyć się tych apostrofów?

[code]
def self.factory(klass, params)
if defined? klass
return klass.new(params)
end
end

X.factory(A, params)[/code]

dzięki, pomogło :slight_smile:
co do drugiej podpowiedzi to przekazywany jest String dlatego musze używać constantize. Nazwa klasy jest dynamicznie wybierana w zależności od tego jaką opcję wybierze użytkownik.