2011-07-01 4 views
0

私は一時パスワードをユーザに割り当てています。2つのRubyシンボルが同じオブジェクトを指し示すようにするにはどうしたらいいですか?

今私はコードとしてこれを持っており、それが動作します:

temp_password = random_pronouncable_password 
@user = User.create!(params[:user].merge(:password => temp_password, :password_confirmation => temp_password)) 

が、私は方法がこの

@user = User.create!(params[:user].merge(:password, :password_confirmation => temp_password)) 

誰でもこのような何かをする方法を知って行うことができるようにしたいですか?全ての

+0

これでどのような問題を解決しようとしていますか? – keymone

答えて

3

あなたは2つだけを持っている場合は、単にそれらを繰り返すと、おそらく繰り返しを明らかにするために、あなたのコードをフォーマット:

@user = User.create!(params[:user].merge(
    :password    => temp_password, 
    :password_confirmation => temp_password 
)) 

他に何かがちょうど有用な目的を果たしていない余分なノイズの束になります。上記を見ている人は、すぐに何が起こっているのかをすぐに知ることができ、それは良いクリーンコードの指標です。

おそらくHash[]コンストラクタを使用して賢明なものを考え出すことができます。おそらくHash with a default valueでもそれは賢いことではありません。 Clevernessは限られた供給状態にありますので、本当に必要な時に特別な機会に保存してください。

+0

+1は賢さを無駄にしないノートです。 –

1

まず、params[:user]はルビーのハッシュです。ハッシュはオブジェクトを他のオブジェクトに関連付けます。 Commonは、シンボルをキーとして関連付け、その他のオブジェクトは値として関連付けます。だから、あなたはシンボルポイントを何かに作ってはいけません。

第2に、これを呼び出すとHash#mergeが呼び出され、別のハッシュが必要です。マージするために渡したキーと値はすべて、レシーバとマージされます。だからあなたはそれに本当の有効なハッシュを渡さなければなりません。

第3に、レールでこれを行う必要があるvalidates_confirmation_ofコールは、この使用を防ぐように設計されています。パスワードを2回設定することによって、間違ったパスワードをユーザーに設定することは非常に難しくなります。これを1つの割り当てにすることは、機能の精神に反するものであり、両方のキーに明示的に割り当てられる価値があります。

最初のスニペットが正しいので、この場合に使用する必要があります。

関連する問題