【问题标题】:current_user not working in User model. I'm using Devisecurrent_user 不在用户模型中工作。我正在使用设计
【发布时间】:2016-03-10 17:20:20
【问题描述】:

我正在学习 Ruby on Rails,并且很难在用户模型中定义我当前的用户。

我的用户模型:

class User < ActiveRecord::Base
  devise :database_authenticatable, :confirmable, :registerable,
     :recoverable, :rememberable, :trackable, :validatable

...

def downgrade
  self.role = :standard
  current_user.wikis.each { |wiki| wiki.make_public }
  save
end

当我在 current_user 上调用 wiki 时,我没有收到任何方法错误。我认为设计提供了 current_user 方法。请帮忙,谢谢!

【问题讨论】:

  • 请粘贴完整的错误信息。我们不知道哪种方法是未知的。是current_user 还是wikis
  • 是的,Devisecurrent_user 定义为辅助方法,因此您可以在控制器和模板中使用它。检查here

标签: ruby-on-rails ruby devise model


【解决方案1】:

current_user 是一种控制器方法,在您的模型中可用。但是,我相信您希望简单地引用范围内的 User 实例。尝试这样做,假设 wikis 是 User 类中的关联或方法。

def downgrade
  self.role = :standard
  wikis.each { |wiki| wiki.make_public }
end

downgrade 是 User 类的实例方法,这意味着必须在该类的实例上调用它。您的控制器中可能有类似current_user.downgrade 的代码,其中current_user 是User 的一个实例。

在实例方法中,“当前”实例由self 引用,例如self.wikis(在当前实例上调用wikis 方法)。但是self 通常可以省略。 wikisself.wikis 做同样的事情。

其中一个例外是需要self 的属性分配。

self.role = :standard  # invokes the role= method. Same as role=(:stardard)
role = :standard  # This will not work as expected! It creates a local variable named "role".

【讨论】:

  • 谢谢!这很有帮助。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-10-11
  • 1970-01-01
  • 1970-01-01
  • 2012-10-26
  • 2016-02-01
  • 1970-01-01
  • 2014-02-23
相关资源
最近更新 更多