0

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

我有用户,可以通过注册订阅课程。它们通过 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 版。

4

1 回答 1

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)
于 2013-08-05T15:41:50.610 回答