2016-05-27 12 views
1

私はRailsを使用したモデルでメソッドを持っています。これはコードです:Rubyの正規表現から変数への値の格納

def ensure_appropriate_age 
    age = match[:age] 

    if age[/\d/].to_i > 18 
    current_user.update age: age[/\d/].to_i 
    else 
    %{We could not proceed, sorry.} 
    end 
end 

私は何のユーザタイプの入力を取り、それは数が含まれている場合、それを保存するために18以上であることを確認しています。

私の年齢は次のように入力します:im 24。私はまだ偽になり、データベースでは数字「2」しか保存されていないことがわかります。

この作品を制作するには何が必要ですか?

答えて

4

複数の数字を一致させるには、\d+を使用する必要があります。 \dは、数字の1桁にのみ一致します。

あなたが示すように、二度それを評価する必要がないようにあなたはまた、変数に正規表現の値をキャプチャすることができます:それは第二のステップバックを良いことだ

def ensure_appropriate_age(age_string) 
    age = age_string[/\d+/].to_i 

    if age > 18 
    current_user.update age: age 
    else 
    %{We could not proceed, sorry.} 
    end 
end 
1

、と自問してみてくださいなぜここで文字列から年齢を抽出する必要がありますか?それ以外に何を持っていますか?さらに情報がある場合は、データを分割して適切な型にキャストするために、呼び出し元または初期化子にクイックパーサーを作成します。

トリックは:年齢が他の情報から分離されると、キャストは簡単です。

user_data = "John Smith 22" 
@name, @surname, age_str = user_data.split(" ") 
@age = age_str.to_i 

あなたの機能を使用してください。 Ruby style guidesは、必要がない限り(すなわち、あなたの文字列には引用符がいっぱいです)、
%{}ではなく、引用符"..."を使用するようお勧めします。

可能な限り単純にしておくと、コードを読みやすくなり、書き込みとデバッグが速くなります。正規表現(es?)は一番簡単な方法ですが、そこに着くまでは汗をかくことはありません:)