Mysql Rails 2.3.9-范围、全部删除、全部更新
我有一个叫RaceWeek的模型。我要执行的两个操作: 1我想使用以下条件确定记录的范围:Mysql Rails 2.3.9-范围、全部删除、全部更新,mysql,ruby-on-rails,scope,Mysql,Ruby On Rails,Scope,我有一个叫RaceWeek的模型。我要执行的两个操作: 1我想使用以下条件确定记录的范围: "start_date <= #{Time.now} AND end_date >= #{Time.now} AND recordable_type != 'User'" 然后我想删除所有这些记录。以下是我现在如何尝试: RaceWeek.delete_all("start_date <= #{Time.now} AND end_date >= #{Time.now} AND r
"start_date <= #{Time.now} AND end_date >= #{Time.now} AND recordable_type != 'User'"
然后我想删除所有这些记录。以下是我现在如何尝试:
RaceWeek.delete_all("start_date <= #{Time.now} AND end_date >= #{Time.now} AND recordable_type != 'User'")
2删除所有记录后,我想重置剩余记录的值。以下是我现在如何尝试做到这一点:
RaceWeek.find(:all, :conditions => ["start_date <= #{Time.now} AND end_date >= #{Time.now}"]).update_all("games_won = 0, games_lost = 0")
在不讨论我遇到的所有问题的情况下,您能解释一下您通常是如何执行这些类型的操作的吗?我想我明白您在尝试做什么了。。但我认为有更好的方法可以解决这个问题。我不确定您正在执行的操作的上下文,因此您可以用更合适的名称替换以下命名的\u范围名称,但如果您有类似的名称:
#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.started_before_and_ended_after_today.not_recordable_user.find(:all)
现在,您可以随时将命名的_范围链接在一起。但是看起来你正在尝试做一些合理重复的事情,所以你不必每次都在每个控制器上写出来,你只需要在你的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
#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
RaceWeek.reset_records