Problem rozwiązany, proszę o usunięcie posta
Chciałem napisać metodę która automatycznie generuje mi getter. Przykładowy getter:
def nip
read_attribute(:field).to_i
end
Chciałbym do niego stworzyć coś takiego, co tworzyłoby taki getter automatycznie, ponieważ mam kilka takich pól, na których robiłbym dokładnie to samo. Fajnie jakby taka metoda była widoczna jak zwykła metoda modelu? Wie ktoś jak mógłbym coś takiego zrobić?
module GettersAndSettersToI
extend ActiveSupport::Concern
module ClassMethods
def getter_and_setter *methods
methods.each do |method|
#getter
define_method(method) do
read_attribute(method.to_sym).to_i
end
#setter
define_method "#{method}=" do |arg|
write_attribute(method.to_sym, arg.to_i)
end
end
end
end
end
Przykładowe użycie
class Person
include GettersAndSettersToI
getter_and_setter "nip", "pesel"
end
Nip i pesel trzymam w bazie danych jako float i chciałem, aby model jakoś wymuszał, żeby zarówno z jak i do bazy danych wychodziły tylko dane typu integer
Nip i pesel najlepiej przechowywać jako string. To są identyfikatory będące ciągami znaków (cyfr), a nie liczby. Nie wykonuje się na nich typowych operacji matematycznych jak np. dodawanie czy mnożenie dwóch numerów nip. Podobnie jest z numerami telefonów.
No to chyba jednak źle zrozumiałem ale w takim razie jeśli zmienisz typ kolumny z float na string jak napisał @mgn to żadne dodatkowe metody nie będą Ci potrzebne.