在rails环境中直接执行sql语句而不需要创建MODEL

本文介绍了一个基于Ruby on Rails的应用中如何根据不同类型的收集规则(每日、每周、每月)执行相应的更新操作。通过查找与特定规则相关的项,并根据当前时间和日期判断是否需要更新AP状态。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

标准格式是:ActiveRecord::Base.connection.execute(sql)

namespace :opengoss do
  desc "USAGES: rake opengoss:collect_rules"
  task :collect_rules => :environment do
    
    
    @collect_rules = CollectRule.find :all
    @collect_rules.each do |rule|
      type = rule.rule_type.to_i
      case type
      when 1
        daily_collect_rule(rule.id)
      when 2
        weekly_collect_rule(rule.id)
      when 3
        monthly_collect_rule(rule.id)
      end   
    end
  end
   
  def daily_collect_rule(id)
    items = CollectRuleItem.find(:all, :conditions => ['collect_rule_id = ?',id.to_i])
    unless items.empty?
      items.each do |item|
        update_aps(id,item)
      end
    end
  end
  
  def weekly_collect_rule(id)
    now = Time.now
    weekly = {'monday' =>1,'tuesday' => 2,'wednesday' => 3 , 'thursday' => 4 , 'friday' => 5 , 'saturday' => 6 ,'sunday' => 0 }
    items = CollectRuleItem.find(:all, :conditions => ['collect_rule_id = ? and start_date = ? ',id.to_i, weekly.index(now.to_date.cwday)])
    unless items.empty?   
      items.each do |item|
        update_aps(id,item)
      end
    end
  end
  
  def monthly_collect_rule(id)
    now = Time.now
    items = CollectRuleItem.find_by_sql("SELECT * FROM `collect_rule_items` WHERE collect_rule_id = #{id}")
    unless items.empty?
      items.each do |item|
        monthly_update_aps(id,item)
      end
    end
  end

  def update_aps(id,item)
    now = Time.now
    con1 = item.start_time < now.hour && item.end_time > now.hour && item.collect_option?
    con2 = (item.start_time >= now.hour || item.end_time <= now.hour ) && !item.collect_option?
    if con1 || con2
      puts "11111"
      ActiveRecord::Base.connection.execute("UPDATE `mit_aps` SET `mit_aps`.`ap_state` = 0  WHERE `mit_aps`.`collect_rule_id` = #{id}") 
    else
      puts "2222"
      ActiveRecord::Base.connection.execute("UPDATE `mit_aps` SET `ap_state` = 2  WHERE `mit_aps`.`collect_rule_id` = #{id}") 
    end
  end
  
  def monthly_update_aps(id,item)
    date = Time.now.to_date
    con1 = item.start_date.to_date < date && item.end_date.to_date > date && item.collect_option?
    con2 = (item.start_date.to_date >= date || item.end_date.to_date <= date ) && !item.collect_option?
    if con1 || con2
      puts "33333"
      ActiveRecord::Base.connection.execute("UPDATE `mit_aps` SET `mit_aps`.`ap_state` = 0  WHERE `mit_aps`.`collect_rule_id` = #{id}") 
    else
      puts "4444"
      ActiveRecord::Base.connection.execute("UPDATE `mit_aps` SET `mit_aps`.`ap_state` = 2  WHERE `mit_aps`.`collect_rule_id` = #{id}") 
    end
  end
  
end
 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值