2016-08-18 4 views
0

私はアプリケーションのモデルに多くの文字列を持ちますが、各行に先頭、末尾および重複する空白は入れてはいけません。Railsの標準属性セッターを生成する方法

これを確実にするために、私は、属性ごとに別々の属性setterメソッドを作成しました:

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

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

... 

よりエレガント、ドライヤーの道があるはずです。 nilのチェックを含む。

答えて

1

すべての必要な属性設定ツールを作成するクラスメソッドを定義します。このバージョンでは、すべてのブランク値にnilを返します、または他の人のためのトリミングと圧迫文字列:(することを忘れないでください、単に

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 

とは、あなたがこの属性セッターを定義する対象となるモデルの属性を一覧表示します上記のモジュールを含む):

include ApplicationModel 

set_trimmed :label, :description, :postal_address, :street_address, ... 
関連する問題