1

嗨,我正在尝试访问模型中的 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

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不能从 Rails 的模型文件中访问,只能从控制器、视图和助手中访问。

你应该做的是将 传递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
于 2013-03-28T11:35:31.063 回答
2

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

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

于 2013-03-28T11:59:30.797 回答
0

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

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

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

于 2019-03-22T11:45:03.130 回答