4

我目前使用查找或創建方法來更新我用來存儲緩存信息的關聯記錄,但我想知道是否有一些更簡單的替代方法類似於構建,因爲對象是has_one關係。使用build_的問題在大多數情況下,對象將存在並需要更新。我可以使用一堆ifs檢查,但是想知道是否有比我目前使用的更好的rails-fu。rails的構建或更新方法?

def self.update_caches(data) 
    cache = SpaceCache.find_or_create_by_space_id(@space.id) 
    cache.rating = ((data.ratings.sum/data.ratings.size)/20).round 
    cache.price_min = @space.availables.recent.average(:minimum) 
    cache.price_avg = @space.availables.recent.average(:price) 
    cache.save 
    end 

獎勵:

這裏我也閱讀:

http://m.onkey.org/active-record-query-interface

但欄杆計算方法平均,總和等將在3.1貶值,所以應該我不確定如果我應該替換他們?

count(column, options) 
average(column, options) 
minimum(column, options) 
maximum(column, options) 
sum(column, options) 
calculate(operation, column, options) 
+0

你可以試試這個方法create_or_update:http://stackoverflow.com/questions/5578625/find-or-create-by-in-rails-3-and-updating-for-creating-records/5580108 #5580108 – fl00r 2011-04-25 21:44:24

回答

2

我爲我寫了一個has_one :event

def build_or_update_event(params) 
    result = new_record? ? build_event(params) : event.update_attributes(params) 
    result != false 
    end