`
xf986321
  • 浏览: 164776 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

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

阅读更多

标准格式是: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
 
分享到:
评论

相关推荐

    model自动生成对应crud sql语句

    标题中的“model自动生成对应crud sql语句”指的是在软件开发过程中,利用特定的工具或框架,通过定义数据模型(Model)自动生成功能齐全的CRUD(Create, Read, Update, Delete)SQL语句的技术。这种方法可以显著...

    rails指南 中文版

    通过ActiveRecord,开发者可以使用面向对象的方式来操作数据,而无需编写SQL语句。 2. **ActionController**:负责处理HTTP请求并生成HTTP响应。控制器是MVC架构中的C,它连接模型和视图,处理用户输入,调用模型...

    rails2.0下实现《rubyonrails》中的mybook实例

    在数据库迁移文件(如`db/migrate/xxxx_create_books.rb`)中,Rails已经为我们自动生成了创建`books`表的SQL语句。 接着,我们可以创建一个控制器来处理HTTP请求,例如`rails generate controller Books`。这会...

    rails学习教程

    通过定义模型类,你可以创建、读取、更新和删除数据库记录,无需写SQL语句。 七、Rails的测试 Rails强调TDD(测试驱动开发),内置了Test::Unit和RSpec测试框架。编写测试可以帮助你确保代码质量,提前发现和修复...

    Ruby on Rails实践

    例如,ActiveRecord是Rails中的一个关键组件,它提供了ORM(Object-Relational Mapping)功能,允许开发者用Ruby对象直接操作数据库,无需编写SQL语句。 在Rails中,路由(Routes)是连接URL与控制器动作的桥梁。...

    ruby on rails 2.3.5 api html版

    通过阅读和查阅Rails 2.3.5的API文档,开发者不仅可以学习到如何在Rails环境中组织代码,还能掌握如何利用其强大的特性来提高开发效率。不过要注意,Rails框架已经发展到更高的版本,新版本可能引入了更多的改进和...

    Ruby On Rails教程

    - **Windows平台安装:** 在Windows环境下安装Rails需要先安装Ruby环境,然后通过RubyGems管理器安装Rails。 - **macOS平台安装:** macOS用户可以通过Homebrew工具轻松安装Ruby及Rails。Homebrew是一个高效的包管理...

    结合使用 Oracle 和 Ruby on Rails 教程

    4. **安装JRuby和Oracle驱动**:在Rails项目中,需要安装JRuby环境,因为Oracle驱动是Java编写的。同时,还要添加ojdbc驱动到项目的类路径中,例如`ojdbc6.jar`或`ojdbc7.jar`。 5. **配置数据库连接**:在`...

    Agile Web Development with Rails (PDF)

    ActiveRecord是Rails中一个重要的ORM(对象关系映射)库,它提供了数据库交互的高级抽象,使得开发者能够以面向对象的方式操作数据库记录,而无需编写繁琐的SQL语句。ActiveRecord支持数据库的自动迁移,使得数据库...

    rails-1.0.0

    它允许开发者使用Ruby代码与数据库交互,无需编写SQL语句。Rails 1.0.0支持多种数据库,如MySQL、PostgreSQL和SQLite。 2. **ActiveRecord模型**:模型层包含了业务逻辑和数据验证。开发者可以定义属性、关联(如一...

    rails 15 分钟博客

    2. 数据库集成:Rails默认使用ActiveRecord,这是ORM(对象关系映射)库,允许开发者用Ruby代码操作数据库,无需编写SQL语句。 3. RESTful设计:Rails鼓励使用REST(Representational State Transfer)架构风格,将...

    Rails 4 Days - Chinese

    书中还会涵盖ActiveRecord,这是Rails用于数据库操作的ORM(Object-Relational Mapping)库,让开发者可以使用Ruby代码直接操作数据库,无需编写SQL语句。 书中还将介绍Rails的测试驱动开发(TDD)理念,包括使用...

    Rails 敏捷开发实践

    在 Rails 中,Active Record 是一个典型的 ORM 实现,它允许开发者使用面向对象的方式与数据库交互,避免了复杂的 SQL 语句编写。例如: ```ruby # 查询状态为 "paid" 的订单,并关联用户信息,限制返回 5 条记录,...

    Ruby on Rails Web开发学习实录随书光盘(源代码).

    3. **ActiveRecord**:Rails中的ORM(对象关系映射)库,它将数据库操作与业务逻辑解耦,使得开发者可以使用Ruby代码来操作数据库,无需编写SQL语句。 4. **Scaffold**:Rails提供的快速开发工具,可以自动生成CRUD...

    ruby on rails 实例depot

    创建新模型后,使用`rails generate migration`创建迁移文件,定义数据库表的字段和结构,然后运行`rails db:migrate`执行迁移。 6. **控制器(Controllers)**:控制器处理HTTP请求并调用模型进行业务处理。比如,...

    rails敏捷开发,我的成功之路

    - **概念介绍**:ActiveRecord是一种对象关系映射(Object-Relational Mapping, ORM)技术,它允许开发者用面向对象的方式来处理数据库中的记录,而无需编写复杂的SQL语句。 - **特点**:提供了诸如查询、创建、更新...

    Ruby on Rails开发指南

    本指南将深入介绍Ruby on Rails的核心概念、开发环境的搭建以及实际项目中的应用。 1. **Ruby语言基础**:Ruby是Rails的基础,它是一门动态类型、面向对象的语言,以其简洁、优雅的语法而著名。理解Ruby的基本数据...

    ror培训第4天 -model1

    在本篇"ror培训第4天 -model1"中,我们聚焦于Model中的Active Record,这是一个强大的对象关系映射(ORM)工具,使得开发者可以使用Ruby语言来操作数据库,而无需直接编写SQL语句。 Active Record的迁移...

    Ruby+on+Rails实践

    RoR的一大特色是其ActiveRecord,它是ORM(对象关系映射)的一部分,使得开发者可以用Ruby类直接操作数据库表,减少了编写SQL语句的工作量。例如,定义一个User模型,可以直接创建、读取、更新和删除数据库中的用户...

Global site tag (gtag.js) - Google Analytics