1

こんにちは、find_or_create_by を使用してオンザフライで要素を作成する目的で、モデル内で current_user にアクセスしようとしています。

以下は私のモデル内の方法です

def opponent_name=(name)
self.opponent = Opponent.find_or_create_by_name_and_team_id(name,current_user.team_id) if name.present?
end

しかし、私が得ているエラーは

NameError in EventsController#create

undefined local variable or method `current_user' for #<Event:0x007fb575e92000>
4

4 に答える 4

3

モデル ファイルの current_user にアクセスします。

# code in Applcation Controller:
class ApplicationController < ActionController::Base
  before_filter :global_user

  def global_user
    Comment.user = current_user
  end
end

#Code in your Model File :
class Comment < ActiveRecord::Base
  cattr_accessor :user  # it's accessible outside Comment
  attr_accessible :commenter 

  def assign_user
    self.commenter = self.user.name
  end
end

MVC アーキテクチャ ルールに違反している場合はご容赦ください。

于 2013-09-09T22:03:06.517 に答える
3

current_user is not accessible from within model files in Rails, only controllers, views and helpers.

What you should do is to pass the current_user.team_id to the opponent_name method like this:

def opponent_name=(name, current_user_team_id)
  self.opponent = Opponent.find_or_create_by_name_and_team_id(name,current_user.team_id) if name.present?
end
于 2013-03-28T11:35:31.063 に答える
2

モデルで current_user にアクセスするのは良い方法ではありません。このロジックはコントローラーに属しています。ただし、回避策が本当に見つからない場合は、スレッドに入れる必要があります。ただし、これはビルド方法ではないことに注意してください。

https://rails-bestpractices.com/posts/2010/08/23/fetch-current-user-in-models/

于 2013-03-28T11:59:30.797 に答える