2016-08-18 2 views
0

Ich habe viele Zeichenfolgen in den Modellen meiner Anwendung, jeder sollte keine führende, nachfolgende und doppelte Leerzeichen enthalten.Generieren von Standard-Attribut-Setter für Rails

Um dies zu gewährleisten, habe ich separate Attribut Setter-Methoden für jedes Attribut:

def label=(text) 
    write_attribute(:label, text.strip.squeeze(' ')) 
end 

def description=(text) 
    write_attribute(:description, text.strip.squeeze(' ')) 
end 

... 

Es sollte eine elegantere, trockner Weg. Einschließlich eines Schecks für Null.

Antwort

1

Definieren Sie eine Klassenmethode in Ihren Belangen, die alle erforderlichen Attribut-Setter erstellt. Diese Version wird null für alle Leerwerte zurückzukehren, oder die zugeschnittene und drückte Zeichenfolge für andere:

module ApplicationModel 
    extend ActiveSupport::Concern 

    module ClassMethods 

    def set_trimmed(*attributes) 
     attributes.each do |a| 
     define_method "#{ a.to_s }=" do |t| 
      tt = t.blank? ? nil : t.strip.squeeze(' ') 
      write_attribute(a, tt) 
     end 
     end 
    end 

    end 
end 

und einfach die Attribute in Ihrem Modell Liste, für die Sie dieses Attribut Setter wollen definiert werden (nicht vergessen schließen Sie das Modul oben ein):

include ApplicationModel 

set_trimmed :label, :description, :postal_address, :street_address, ... 
Verwandte Themen