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>
我究竟做错了什么?
作用域是您在类(例如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)