2013-08-05 219 views
0

我試圖重構和優化我的代碼。特別是,我想減少進入數據庫的查詢量。在我的用戶控制器中,它工作得很好,但在其他控制器中,我嘗試了相同的控制器,但沒有。我已經搜索了一段時間,爲什麼它不起作用的答案,但我不能真正回答它。Rails命名範圍

我有用戶,可以通過註冊訂閱課程。他們通過has_many:通過等關係連接。以下作品:

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

但在我的課程控制器以下不會工作:

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

的範圍在相應的模型定義和正常工作。它們並不複雜,只是「哪裏......真/假」的定義。有人在這裏知道這個問題嗎?謝謝!

我使用軌道版本3.2和紅寶石版本2

+1

你用什麼版本的Rails的? –

+0

我使用Rails版本3.2和紅寶石2.對不起,我忘了。 – Linus

回答

2

直到軌道4,如果你想擁有ActiveRecord::Relation實例(您可以調用其他範圍),你應該使用scoped方法返回的Array代替:

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

這應該工作。

如果你想使用includes(:courses),你就去做,例如使用:

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

非常感謝!請問如果我使用rails 4會有什麼不同?還有一個問題,是否可以將它與包含(:courses)聲明結合起來? – Linus

+1

@LinusAn在Rails 4中'all'返回'ActiveRecord :: Relation'和'scoped'方法已被棄用。所以你的代碼會很好。 我編輯了我的答案來回答你的第二個問題。 –

+0

非常感謝! – Linus