我想我明白你想要做什麼..但我認爲有更好的方法可以接近它。我不知道你在做什麼,所以你可能可以用更合適的東西替換以下named_scope名稱上下文的,但如果你有這樣的事情:
#Your RaceWeek Model
class RaceWeek < ActiveRecord::Base
named_scope :started_before_and_ended_after_today, :conditions => ["start_date <= #{Time.now} AND end_date >= #{Time.now}"]
named_scope :not_recordable_user, :conditions => ["recordable_type != 'User'"]
end
在你的任何控制器
現在,而不必每次都寫出來是這樣的:
RaceWeek.find(:all, :conditions => ["start_date <= #{Time.now} AND end_date >= #{Time.now} AND recordable_type != 'User'"])
你可以隨便寫的東西更清潔這樣的:
RaceWeek.started_before_and_ended_after_today.not_recordable_user.find(:all)
所以現在你可以鏈named_隨時隨地合作。但是,看起來你正在嘗試做一些合理的重複操作,而不是每次在你想要使用它的每個控制器中寫出這些內容,只需在你的RaceWeek模型上創建一個「類方法」來爲你做。每當你需要刪除一切,只更新留在剩餘的記錄
#Your RaceWeek Model
class RaceWeek < ActiveRecord::Base
named_scope :started_before_and_ended_after_today, :conditions => ["start_date <= #{Time.now} AND end_date >= #{Time.now}"]
named_scope :not_recordable_user, :conditions => ["recordable_type != 'User'"]
def self.reset_records
started_before_and_ended_after_today.not_recordable_user.delete_all
started_before_and_ended_after_today.each { |record| record.update_attributes(:games_won => 0, :games_lost => 0)}
end
end
現在:下面的模型可以refractored了很多得更爲出色,但希望這將讓你開始。所有你需要做的就是打電話:
RaceWeek.reset_records
完美!非常感謝 – keruilin 2011-05-15 03:32:10