我试图重构和优化代码。特别是,我想减少进入数据库的查询量。在我的用户控制器中,它工作得非常好,但在另一个控制器中,我尝试过相同的操作,但事实并非如此。我现在已经搜索了一段时间了解答案为什么它不起作用但我无法真正回答它。
我有用户,可以通过注册订阅课程。它们通过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.
答案 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)