2012-06-19 42 views
1

我有下面的類ASSOCATION!方法總是返回正確的領導者,但未能更新對象的foreign_key'leader_id'。Rails的不節能

正如你可以從我的實際代碼評論看到的,我不知道爲什麼。當我去控制檯並明確設置一個組的領導者時,一切似乎都很好。

有沒有人明白爲什麼會這樣?

(順便說一下,該方法的目的是更新的一組領導者當先前前導已變爲不活動,新的領導者是一個與最登錄。)

回答

3

嘗試在前面添加自leader

self.leader = users.active.sort_by{|u| u.completed_sessions}.last 
save! 

這是紅寶石分配必要的,因爲紅寶石並不知道是否leader是可變本地該方法,或該對象self上的分配方法。

而且,如果completed_sessions是數據庫列,我會考慮使用此代碼來拉正確的用戶:

self.leader = users.active.order("completed_sessions DESC").first 

這將使用你的數據庫的查詢,而不是拉動所有記錄,並整理數據庫Ruby然後對它們進行排序 - 當用戶數據庫變大時更高效。

+0

謝謝。我以前只是隨處使用自己,但後來我看到很多奇特的人離開了它。感謝您的澄清。 這是一個很好的主題:http://stackoverflow.com/questions/4699687/when-to-use-self-foo-instead-of-foo-in-ruby-methods – Andy

+0

是的,不幸的是,complete_sessions是不幸的不是數據庫列,而是一種方法......但很好的提醒。 – Andy