2011-12-24 31 views
0

我具有由用戶驗證的唯一性爲每個課程的模型Enrollment使用範圍訪問唯一的單個記錄而不必循環?

validates_uniqueness_of :user_id, :scope => :course_id 

我創建在Enrollment模型中的範圍在哪裏可以在使用過程中通過由用戶來縮小過程:

scope :course, lambda { |course| where(:course_id => course.id) } 

通過這樣做,我可以打電話:

current_user.enrollments.course(@course) 

然而,然後讓我遍歷結果,甚至thoug h只有一個結果(每個用戶的獨特課程)。這很好,但似乎應該有一種方法來簡單地執行範圍,然後只需訪問記錄而無需循環訪問一條結果。

任何想法?我覺得我失去了一些東西。

回答

1

試試這個:

current_user.enrollments.course(@course).first 

將生成SQL查詢與LIMIT 1語句,並沒有直接包成一個數組中返回的模式。

關於您的範圍小記。由於您的Enrollment模型有course關聯(我假設爲has_one :course)您最好給範圍指定不同的名稱,如by_course以防止與course關聯衝突,該關聯允許您爲給定的註冊獲取課程。

+0

Duhhhhh!謝謝 – Marc 2011-12-24 18:49:23

+0

謝謝更人性化,但upvoting和接受正確的答案是更有效的StackOverflow =) – 2011-12-24 19:00:18