0

Rails アプリケーションでの認証に devise gem を使用しました。after_create コールバックで現在のユーザーに関する特定の情報を取得したい。それはどのように可能ですか?
私のモデルコードは次のとおりです。

class Department
  field :name
  after_create :create_news
  private
  def create_news
    @user = current_user
  end
end

しかし、新しい部門を作成すると、次のエラーが発生します。

undefined local variable or method `current_user' for #<Department:0x00000005b51648>

これに最適な方法は何ですか?

4

2 に答える 2

2

レールでのアクセス制御は、モデル レベルではなく、コントローラー レベルで行われます。その結果、Rails は、モデル コード内から現在のユーザー、Cookie などにアクセスするためのメカニズムを提供しません。必要に応じて、メソッドへのパラメーターによってデータをモデルに渡すことができます。ただし、それは業界で最高のプログラマーの設計上の決定を無視することになるため、おそらく良い選択ではないと思います。

言い換えれば、あなたがやろうとしていることをしないでください。物事を行う方法の知識をモデルに入れますが、コントローラーで誰がそれを行うことができるかを制御します。

一方、何らかの理由で現在のユーザーを保存しようとしている場合は、何らかの関連付け (または mongo を使用しているため、ネストされたドキュメント) によって行う必要があります。current_userその場合、モデル内で使用しないでください。代わりattr_accessorに on ユーザーを作成し、モデルのインスタンスのユーザーをcurrent_userコントローラーに設定してから、必要な方法でコールバックに保存します。

于 2012-12-30T09:07:21.010 に答える
-2

current_user は、コントローラーとビューでのみ使用できます。departmentモデルがモデルに接続されている場合は、関連付けuserを追加する必要belong_toがあり、次のようなことができます

after_create :create_news
def create_news
 @current_user = self.user
end
于 2012-12-30T08:53:59.590 に答える