Rails:范围界定时出现未定义方法错误

jon*_*hue 2 ruby methods scope ruby-on-rails ruby-on-rails-5

我有以下用户模型:

class User < ApplicationRecord
    # Associations
    has_many :issues
    # Instances
    def has_issues?
        issues.resolved.exists?
    end
end
Run Code Online (Sandbox Code Playgroud)

和问题模型:

class Issue < ApplicationRecord
    # Associations
    belongs_to :user
    # Scopes
    scope :resolved, -> { where(:resolved => true) }
end
Run Code Online (Sandbox Code Playgroud)

如果我现在在我的观点中这样称呼:

unless current_user.has_issues
Run Code Online (Sandbox Code Playgroud)

我收到以下错误:

Controller#index 中的 NoMethodError
未定义方法 `has_issues' for #<User:0x72dd7c0>

我究竟做错了什么?

Jor*_*ing 5

作用域是您在类(例如User.has_issues)或 ActiveRecord::Relation(例如User.where(...).has_issues)上调用的方法。您不能在模型的实例上调用作用域方法。如果您想获取有关模型实例的信息,您应该使用实例方法,而不是范围:

class User < ApplicationRecord
  has_many :issues

  def has_issues?
    issues.resolved.exists?
  end
end
Run Code Online (Sandbox Code Playgroud)