0

こんにちは、古いオブジェクトのいくつかの属性をコピーし、変更された属性がほとんどない新しいオブジェクトを作成したいと考えています。Rails バージョン 3.0.7 を使用しているため、old_object.dup を使用できません。私は old_object.clone を使用したくありません。これは、凍結状態のコピーを含む、レコードの浅いコピーを提供するためです。したがって、私は次の方法に従います

@old_product = Product.find(params[:id])

@product = Product.create(@old_product.attributes.merge({:description => params[:product][:description], :category => params[:product][:box_id], :user_id => current_user.id}))

しかし、エラー user can't be blank が表示されます。実際、私の説明とカテゴリも保存されていません。これはこれを行う正しい方法ですか。古いオブジェクトの属性をコピーし、それらのいくつかを変更する別の方法。

4

3 に答える 3

0

を設定しない方がよいでしょうattr_accessible :user_id。これはシステムの脆弱性であり、誰でも一括割り当てで値を変更できます。むしろ、このコードで手動で割り当てるか、クローン機能を使用して他のプロパティを変更してください。

于 2012-10-11T12:01:47.273 に答える
0

私はそれを手に入れました...製品モデルで:user_idがatr_accessibleに追加されました。最初はその属性にアクセスできないため、new_objectでその属性を更新または変更していません。今では正常に動作しています。

于 2012-10-11T11:44:00.893 に答える
0

厄介なソリューションをattr_accessible :user_idモデルに追加することになりますが、アプリケーションが Mass Assignment の悪用に対して脆弱になるため、お勧めできません。

しばらく開発で使用する場合は問題ありません。

于 2012-10-11T16:13:20.807 に答える