2017-06-22 11 views
0

私は素早くnameモデルメソッドを書いて、どのフィールドが存在するかに基づいてユーザーの名前を返します。条件付きで空白文字列を追加する - Rails 5

class User < ActiveRecord::Base 
    validates :first_name, 
    presence: true, 
    length: { 
     maximum: 64, 
    } 

    validates :last_name, 
    length: { 
     maximum: 64, 
    } 

    def name 
    "#{self.first_name}#{" #{self.last_name}" if self.last_name.present?}" 
    end 
end 

のみfirst_nameフィールドが存在する場合、それが返さなければならない:

=> "Joe" 

first_namelast_nameフィールドが存在している両方の場合、それは返すべき:

=> "Joe Bloggs" 

を上記コード作業が、私はそれがきれいに整理することができると感じる。

もっとエレガントな方法ですか?

ありがとうございました

答えて

6

squishを使用できます。

文字列の両端からすべての空白を削除し、複数の空白も1に変更します。それはインスタンスメソッドであるとして

def name 
    "#{self.first_name} #{self.last_name}".squish 
end 

また、あなたはself

def name 
    "#{first_name} #{last_name}".squish 
end 

例えば削除することができます。

" foo bar ".squish 
#=> "foo bar" 
0

私が取る通常のアプローチがある:あなたの代わりにRailsの中で、リストを作っていた場合

[ 
    element_1, 
    element_2, 
    ... 
    element_n 
].map(&:squish).map(&:presence).compact.join(" ") 

あなたは試してみてください:あなたは可能性のあるデータ・クレンジングの目的で

[ 
    element_1, 
    element_2, 
    ... 
    element_n 
].compact.join(" ") 

[ 
    element_1, 
    element_2, 
    ... 
    element_n 
].map(&:squish).map(&:presence).compact.to_sentence 

...国際化された形式の文字列を与えてください:

"a, b, c, and d" 
関連する問題