Rails命名为范围

时间:2013-08-05 15:38:56

标签: ruby-on-rails model controller scope

我试图重构和优化代码。特别是,我想减少进入数据库的查询量。在我的用户控制器中,它工作得非常好,但在另一个控制器中,我尝试过相同的操作,但事实并非如此。我现在已经搜索了一段时间了解答案为什么它不起作用但我无法真正回答它。

我有用户,可以通过注册订阅课程。它们通过has_many:through等关系连接起来。以下作品:

@users_courses = current_user.courses
@courses = @users_courses.a_named_scope

但在我的课程控制器中,以下内容无效:

@all_courses = Course.all
@specific_course = @all_courses.specific_course_scope

范围在各自的模型中定义并正常工作。它们并不复杂,只是“在哪里......真/假”的定义。有人知道这里的问题吗?谢谢!

我正在使用rails版本3.2和ruby版本2.

1 个答案:

答案 0 :(得分:2)

直到Rails 4,你应该使用scoped方法,如果你想让ActiveRecord::Relation实例(你可以调用其他范围)而不是Array

@all_courses = Course.scoped
@specific_course = @all_courses.specific_course_scoped

这应该有用。

如果您想使用includes(:courses),只需执行此操作,例如:

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