2010-12-17 5 views
11

データベースに名前を保存しようとしていて、1つの単語(ファーストネーム)がうまく機能しますが、ユーザーがfirstnameとlastnameの両方を入力すると、 firstname lastnameの代わりにfirstname-lastname(スペース間)。Rails 3を使用して保存する前にスペースをダッシュ​​に置き換えてください

私はおそらく前にフィルタを作成する必要があると知っていますが、どのようにこのようにする必要があるのか​​分かりません。検証を行いたい、つまり、同じ名前を使用できる人は2人いないはずです。

私はRailsのを使用しています3.

答えて

3
あなただけのDBにFIRST_NAMEとLAST_NAME列を持っている、との組み合わせが一意であることを確認するために、独自の検証ルールを作成しないのはなぜ

ます(http://guides.rubyonrails .org/active_record_validations_callbacks.html#creating-custom-validation-methods)を参照してください。また、db内の2つの列に一意のインデックスを作成する必要があります。

0

もう1つの方法は、正規表現を置き換えて既存のスペースをすべて置き換えることです。お使いのモデルでは、次の行に沿って何かを配置します。

self.firstname.gsub(/\s+/, '-') 

注:ルビーが\sを「任意の空白文字」として受け入れるかどうかはわかりません。*誰かが2つの隣接スペース(またはそれ以上)を持つ名前を入力すると、別のダッシュではなく、1つのダッシュにします。

+0

にこれはダッシュではなく、すべての単語のすべての文字をseperates文字... – Ger

+0

、あなたは正しいです!私は '+'ではなく '*'をタイプすることを意味しました!申し訳ありません。 = P – omninonsense

28

文字列にActiveSupportのinflectorメソッドparameterizeを使用できます。

さらに
name = 'john smith'  # => john smith 
name.parameterize  # => john-smith 

、パラメータ化は、ワードブレークに使用するオプションを取るので、あなたは、このようなアンダースコアとダッシュを置き換えることができます。

name.parameterize("_") # => john_smith 

パラメータ化を使用する利点は、それが正常化するということですGearóidああ@ラテン、そう...

name = "jöhanne såltveç" 
name.parameterize  # => johanne-saltvec 
関連する問題