Ruby on rails Rails命名范围

Ruby on rails Rails命名范围,ruby-on-rails,model,controller,scope,Ruby On Rails,Model,Controller,Scope,我试图重构和优化我的代码。特别是,我想减少进入数据库的查询量。在我的用户控制器中,它工作得非常好,但在另一个控制器中,我尝试了同样的方法,但没有。我已经寻找了一段时间的答案,为什么它不起作用,但我不能真正回答它 我有一些用户,他们可以通过注册订阅课程。他们通过很多关系联系在一起:通过等等关系。以下工作: @users_courses = current_user.courses @courses = @users_courses.a_named_scope 但在我的课程中,以下内容不起作用:

我试图重构和优化我的代码。特别是,我想减少进入数据库的查询量。在我的用户控制器中,它工作得非常好,但在另一个控制器中,我尝试了同样的方法,但没有。我已经寻找了一段时间的答案,为什么它不起作用,但我不能真正回答它

我有一些用户,他们可以通过注册订阅课程。他们通过很多关系联系在一起:通过等等关系。以下工作:

@users_courses = current_user.courses
@courses = @users_courses.a_named_scope
但在我的课程中,以下内容不起作用:

@all_courses = Course.all
@specific_course = @all_courses.specific_course_scope
范围在各自的模型中定义并正常工作。它们并不复杂,只是“where…true/false”定义。有人知道这里的问题吗?谢谢


我使用的是rails版本3.2和ruby版本2。

在rails 4之前,如果希望返回
ActiveRecord::Relation
实例(您可以在其上调用其他作用域),而不是
数组,则应该使用
作用域
方法:

@all_courses = Course.scoped
@specific_course = @all_courses.specific_course_scoped
这应该行得通

如果要使用
包含(:courses)
,只需使用,例如:

@specific_course = @all_courses.specific_course_scoped.includes(:courses)

你使用什么版本的Rails?我使用Rails3.2版和Ruby2版。对不起,我忘了。非常感谢!请问如果我使用rails 4,会有什么不同?还有一个问题,是否可以将其与includes(:courses)语句结合起来?@LinusAn在Rails 4
all
中返回
ActiveRecord::Relation
,并且
范围
方法被弃用。所以你的代码会很好。我编辑了我的答案来回答你的第二个问题。