2011-01-29 7 views
0

ちょっと、 関数内でいくつかの計算を実行するには、current_userモデルを使用する必要があります。関数の中で私はcurrent_user.name = '何でも'のように何かする必要があるので、nameの現在の値を変更します。Railsクローンまたはハッシュ?

しかし、私はその変更をローカルにしたいだけで、その機能の内部でのみ実行します。 Railsはオブジェクトを使用しているので、問題です。だから私は思っている、何が最善のことですか?

おそらく、新しいオブジェクトにcurrent_userをクローンし、それを関数内で使用していますか?これは高価なようです。 モデルからハッシュを作成することはできますか?そして私がそうするならば、実際のモデルは変更されませんか?

EDIT:それを使用するために、その後

@attacker = current_user.attributes 

、私は(他の私のようにto_sを指定する必要があります。私のような何かをするのであれば、それはそのハッシュ作品だが、それに関連付けられているタイプが存在しません)何らかの理由ではnilエラーが表示されます。

@attackerの[:名] = '何でも'

答えて

0

パラメータ.to_s?

def my_f(name) 
    new_name = "lorem" + name 
    return new_name 
end 

あなたのコントローラ内のどこか:

loremized_name = my_f(current_user.name) 
+0

うーん、私はwouldn変更が必要なモデルのすべての可能な属性に対して仮想属性を作成したいと考えています。それがハッシュでできると思いませんか? – Spyros

+0

これは単純な変数です。あなたは '関数内でいくつかの計算を実行する '必要があり、'あなたの関数の範囲内で変数を使うことは安全です。あなたはその変数を返すことができますし、あなたが望むようにあなたの関数の中で死ぬことができます。仮想属性は必要ありません。 – lbz

+0

あなたは正しいです、それもオプションです、私もハッシュを試して、彼らは今も大丈夫に動作します。しかし、可変ソリューションはそれほど高価ではないようです。 – Spyros

0

、あなたのモデルのロジックのすべてが必要な場合は、最も簡単な方法は、単にそれのクローンを作成することです:

def local_function 
    user = current_user.clone 
    # Perform some calculations on user here 
end 
+0

yeap、これは私がやっていることでしたが、私はそれを断念し、上記のlbzとして変数を使用しました。実際の緊急性がある場合は、クローンオブジェクトが本当に好きではありません。 – Spyros

関連する問題