0

私の資産モデル内でcurrent_user.id(devise)を使用しようとしましたが、current_user.idだけが使用できません。自分の資産モデルでcurrent_user.idを使用できるようにするにはどうすればよいですか? (何とか資産モデルにユーザーを渡す?)あなたは、あなたのモデルの範囲内でコールバックチェーンでcurrent_userを使用することはできません初心者:カスタムメソッドのアセットモデルにユーザーを渡す方法は?

after_save :set_photo 

    def set_photo 
    user = User.find_by_id(1) 
    # user = User.find_by_id(current_user.id) <-- should be this 
    user.has_photo = true 
    user.save 
    end 
+1

モデル内の現在のユーザーにアクセスすることはできません。これは、deviseによって提供されるヘルパーメソッドです。私が 'モデルでcurrent_userを使用して' googleした場合、複数のスレッドを実装するソリューションが見つかりますが、特にARの接続プールと衝突する可能性があるActiveRecordを使用している場合は、 – prasvin

+1

Btw、あなたがしようとしていることを詳しく説明できますか?資産オブジェクトが保存されている場合は、現在のユーザに対して 'has_photo'フィールドをtrueに設定したいと思います。あなたはAsset forを使用していますか、それはユーザーに関連付けられていますか? 'assets#create'と' assets#update'の単純な単純な解決法を望むならば、単に 'current_user'のための' has_photo'フィールドを更新することができます(あなたが望むなら、あなたはインスタンスメソッドを作成することができます)。または更新が成功しました。 – prasvin

+0

アセットはUserに属している可能性があります。コントローラーの作成と更新のアクションを使用するだけです。アセットはアタッチされた画像です。アセットが削除された場合、アセットが更新アクションでどのように検出されますか? thx – Rubytastic

答えて

1

。これは、current_userが要求応答サイクルのプロパティであるためです。また、ご使用のモデルにcurrent_userを使用することは、データベース設計が不適切または間違っていることをほぼ確実に意味します。

あなたの場合、Assetが更新されたときに、なぜUserの属性を更新しようとしていますか?それは、関連していない限り、特定のコードのにおいです。

あなたが試すことができます物事のカップル:

  1. は、DBの設計上の問題を修正 - AssetUser間の関連付けを定義します。その後、コントローラで@asset.user = current_user(またはそのようなもの)を実行できます。
  2. 醜い、強引な方法:コールバックに依存せず、明示的にあなたのコントローラ内のメソッドを呼び出します。