访问模型中的devise current_user

时间:2013-03-28 11:24:47

标签: ruby-on-rails model devise

您好我正在尝试访问模型中的current_user,以便使用find_or_create_by动态创建元素。

以下是我模型中的方法

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 个答案:

答案 0 :(得分:3)

无法从Rails中的模型文件中访问

current_user,只能访问控制器,视图和帮助程序。

您应该做的是将current_user.team_id传递给opponent_name方法,如下所示:

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

答案 1 :(得分: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架构规则。

答案 2 :(得分:2)

它不是访问模型中current_user的好方法,这个逻辑属于控制器。但是,如果你真的无法找到一个解决方法,你应该把它放到一个线程中。但请记住,这不是应该如何构建的方式。

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

答案 3 :(得分:0)

Rails 5.2引入了当前属性: https://api.rubyonrails.org/classes/ActiveSupport/CurrentAttributes.html

但是一如既往...您必须记住,使用这样的全局状态可能会使某些不可预测的行为‍♀️:

https://ryanbigg.com/2017/06/current-considered-harmful