Ruby on rails 如何从范围从模型访问属性

Ruby on rails 如何从范围从模型访问属性,ruby-on-rails,ruby,rails-activerecord,Ruby On Rails,Ruby,Rails Activerecord,我的应用程序中有两个模型:Person和Review。每个人都有很多评论,每个评论都属于一个人。我的复习模型中有一个名为grade的属性,我想显示每个人的平均成绩,所以我写了这个范围: scope :average_grade, -> { self.first.review.average(:grade) } 有更好的方法吗?除了此方法需要的2个查询外,我还必须运行另外2个查询以在我的控制器中获取适当的Person对象: def show @average = Person.incl

我的应用程序中有两个模型:Person和Review。每个人都有很多评论,每个评论都属于一个人。我的复习模型中有一个名为
grade
的属性,我想显示每个人的平均成绩,所以我写了这个范围:

scope :average_grade, -> { self.first.review.average(:grade) }
有更好的方法吗?除了此方法需要的2个查询外,我还必须运行另外2个查询以在我的控制器中获取适当的Person对象:

def show
  @average = Person.includes(:review).where(id: params[:id]).average_grade
  @person =  Person.includes(:review).find(params[:id])
end

如何避免所有这些查询?

您的作用域是一个实例方法而不是作用域,因为它不返回ActiveRecord::Relation对象

我建议你做以下几点:

# person.rb:
def average_grade
  review.average(:grade)
end

# controller:
def show
  @person =  Person.find(params[:id])
  @average = @person.average_grade
end

您的作用域是一个实例方法而不是作用域,因为它不返回ActiveRecord::Relation对象

我建议你做以下几点:

# person.rb:
def average_grade
  review.average(:grade)
end

# controller:
def show
  @person =  Person.find(params[:id])
  @average = @person.average_grade
end
#person.rb
类Person(人){其中(人id:person)}
结束
#人事主任
类PersonsController<应用程序控制器
方法:人
私有的
def人员
返回@person(如果已定义)@人
@person=person.find(参数[:id])
结束
结束
#show.html.haml
-出席(人)做|
%p=个人\演示者\平均\成绩
#person_presenter.rb
类PersonPresenter
有关演示者的更多信息,请参见此处

#person.rb
类Person(人){其中(人id:person)}
结束
#人事主任
类PersonsController<应用程序控制器
方法:人
私有的
def人员
返回@person(如果已定义)@人
@person=person.find(参数[:id])
结束
结束
#show.html.haml
-出席(人)做|
%p=个人\演示者\平均\成绩
#person_presenter.rb
类PersonPresenter

有关演示者的更多信息,请参见此处

谢谢!顺便问一下,为什么该方法不需要self?因为如果该方法调用实例,则可以省略实例内的
self
方法。谢谢!顺便问一下,为什么该方法不需要self?如果该方法调用实例,则可以省略实例内的
self
方法。