`

rake 对数据库操作深度示例说明

阅读更多
结合自己开发,随手做个备份

一、加载数据

当用rake db:migrate RAILS_ENV=production的时候,自动执行类似
rake db:fixture:load#通过fixture加载数据 

也可以类似
FIXTURES=config_params RAILS_ENV=production /usr/bin/rake db:YAML:restore


在rake db:migrate的文件中,对应

class AddRoleDescription < ActiveRecord::Migration
  def self.up
    add_column "roles", "description", :string

    require 'rake'
    rake = Rake::Application.new
    ENV['FIXTURES'] = "roles,static_permissions,roles_static_permissions"
    Rake::Task["db:YAML:delete"].invoke#删除数据
    Rake::Task["db:YAML:restore"].invoke#重新加载

    user = User.new({:email => 'admin'})
    user.password = 'password'
    user.password_confirmation = 'password'
    if user.save
      puts "Created USER #{user.email}"
    else
      puts "Error creating user.  #{user.errors.inspect}"
    end
    user.roles << Role.find(:all)
    user.save
  end

  def self.down
    remove_column "roles", "description"
    user = User.find_by_email('admin')
    user.destroy
  end
end



二、增加一个字段并且全都赋值

  def self.up
    add_column :analyzers, :region_id, :integer,:default => 1
    Analyzer.find(:all).each { |a|
      a.region_id=1
      a.save
    }
  end

  def self.down
    remove_column :analyzers, :region_id
  end


其中

change_column("datalogs", "start_freq", :integer )#将不会删除这个字段的数据


三、增加一个新的表,并给表增加一条记录

    这个需求,经常是因为在rake db:migrate后,因为增加一个新的表,而这个表有在一些其他功能用到,没有记录就会报错。

class CreateFavUrls < ActiveRecord::Migration
  def self.up
    create_table :fav_urls do |t|
      t.string :name
      t.string :url
      t.string :description
    end
    default_fav_url=FavUrl.new()
    default_fav_url.name="google"
    default_fav_url.url="www.google.com"
    default_fav_url.description="search engine"
    default_fav_url.id=1;
    default_fav_url.save()
  end

  def self.down
    FavUrl.delete_all
    drop_table :fav_urls
  end
end


class CreateRegions < ActiveRecord::Migration
  def self.up
    create_table :regions do |t|
      t.string :name,      :default => "South East USA"
      t.string :ip,        :default => "10.0.0.7"
    end
    default_region=Region.new()
    default_region.name="DEFAULT"
    default_region.ip="127.0.0.1"
    default_region.id=1;
    default_region.save()
  end

  def self.down
    Region.delete_all
    drop_table :regions
  end
end

四,增加索引
class AddUniqueRegion < ActiveRecord::Migration
  def self.up
    change_column("regions", "name", :string,:null => false, :default => "South East USA" )
    change_column("regions", "ip", :string, :null => false, :default => "10.3.2.7")
    add_index(:regions,[:name],:unique=>true)
    add_index(:regions,[:ip],:unique=>true)
  end

  def self.down
    change_column("regions","name", :string, :default => "South East USA")
    change_column("regions","ip",:string, :default => "10.3.2.7")
    remove_index(:regions,:column=>:name)
    remove_index(:regions,:column=>:ip)
  end
end

  create_table "limits", :force => true do |t|
    t.column "measure_id", :integer, :default => 0
    t.column "channel_id", :integer, :default => 0
    t.column "site_id",    :integer, :default => 0
    t.column "max_val",    :float
    t.column "min_val",    :float
  end

  add_index "limits", ["site_id", "measure_id", "channel_id"], :name => "limit_data_idx"

  create_table "measurements", :force => true do |t|
    t.column "measure_id", :integer
    t.column "site_id",    :integer
    t.column "channel_id", :integer
    t.column "value",      :float
    t.column "dt",         :datetime
  end


五,创建视图

class AddMeasurementView < ActiveRecord::Migration
  def self.up
    execute "create or replace view measurement_view as 
    select measures.measure_name as measure, sites.name as site, channels.channel_name as channel,dt,value 
    from ((
      measurements left join channels on channels.id=measurements.channel_id) 
      left join measures on measures.id=measurements.measure_id) 
      left join sites on sites.id=measurements.site_id"
  end

  def self.down
    execute "drop view measurement_view"
  end
end
4
0
分享到:
评论

相关推荐

    浅谈Ruby on Rails下的rake与数据库数据迁移操作

    Migration应专注于数据库Schema的演变,而rake任务则更适合处理复杂的数据操作。遵循最佳实践,编写清晰、高效的rake任务,可以提高开发效率并减少潜在问题。在实际工作中,正确理解和使用这两者是构建健壮的Rails...

    rake-0.8.7

    例如,`db:migrate`命令就是`rake`的一个典型应用,用于执行数据库的迁移操作。 在提供的文件列表中,`rake-0.8.7.gem`是rake库的gem包,它是Ruby的包管理系统,用于安装和管理Ruby库。通过运行`gem install rake-...

    rake-0.8.7.tgz

    通过在命令行输入`rake`,开发者可以触发默认的任务,或者指定特定的任务,如`rake db:migrate`用于执行数据库迁移。 rake-0.8.7.tgz压缩包内包含的rake-0.8.7文件,可能包括了rake的源代码、安装脚本、文档和其他...

    RAKE接收机程序,Rake接收机主要解决,matlab

    - RAKE接收机操作:进行信道估计,确定最佳定时,分配每个手指到相应的信号路径。 - 信号合并:采用合适的合并算法,结合所有手指的信号。 - 信号解码:解扩、解调并解码收到的信号。 - 性能分析:计算并绘制...

    rake接收matlab仿真

    6. Rake 接收机工作过程:Rake 接收机的工作过程可以分为三步:首先,接收机接收到信号,然后对信号进行分集,并对每个分量进行处理,最后对所有分量进行合并,以获得最终的信号。 7. Matlab 仿真结果分析:通过...

    Halcon——rake_测量

    使用halcon进行测量,使用的是rake算子;使用halcon进行测量,使用的是rake算子;

    rake详解(清晰)

    除了在`Rakefile`中直接定义任务,还可以通过`Rake::Task`对象进行更复杂的操作,如修改已定义的任务,或者在运行时动态创建任务。 总结,Rake作为Ruby的构建工具,提供了强大的任务管理和执行能力,通过`Rakefile`...

    matlab rake

    1. "程序流程说明.doc":这是一个文档文件,可能包含了整个OFDM系统的MATLAB实现步骤,包括RAKE接收机的工作流程,以及各个模块的功能解释,对理解代码的运行逻辑非常有帮助。 2. "www.pudn.com.txt":这可能是来源...

    老外写的CDMA rake 接收机 MATLAB程序,还有笔记说明

    Rake接收机的关键操作之一就是码片对齐,即将不同路径的信号调整到正确的相位,以便它们能与用户的码序列精确同步。 4. **合并策略**:Rake接收机通常采用最大比合并(Maximum Ratio Combining, MRC)或选择性合并...

    rake接收机程序

    RAKE接收机的工作原理是将来自不同路径的衰落信号分集并合并,从而有效地抵消多径衰落对信号质量的影响。 RAKE接收机的主要组成部分包括: 1. **信道估计**:在接收端,必须先进行信道估计,以了解信号在不同路径...

    自定义rake工具.zip

    halcon提供给我们使用的测量矩形只能返回一个点,操作起来比较复杂,实际项目中不好使用; 为了提高工具的通用性,鲁棒性,也是为了提高项目的开发效率,基于halcon已有的算子进一步开发工具是比较不错的选择。 rake...

    RAKE接收技术的Matlab仿真实验(附源码).docx

    RAKE接收机利用了多径分集的原理,能够从时间上分离出不同的多径信号,并对每个路径的信号进行加权合并,以增强接收到的信号,减少误比特率。 RAKE接收机的基本结构主要包括两个主要部分:信道估计和分集合并。信道...

    基于MATLAB实现的水声通信Rake接收机代码+使用说明文档.zip

    基于MATLAB实现的水声通信Rake接收机代码+使用说明文档.zip 1、代码压缩包内容 主函数:main.m; 调用函数:其他m文件;无需运行 运行结果效果图; 2、代码运行版本 Matlab 2020b;若运行有误,根据提示GPT修改;若...

    导出数据库的所有数据成YML文件

    这需要一定的编程知识,尤其是Ruby和数据库操作经验。 在这个过程中,还需要注意数据的安全性和隐私性,确保敏感数据在导出和传输过程中得到适当的保护。此外,如果数据量很大,可能需要考虑分批导出或使用数据库的...

    Rake接收机性能仿真(与非Rake接收机对比).pdf

    Rake接收机的基本思想是对到达的不同路径上的信号进行独立处理,然后以某种方式组合这些信号,以增强信号强度并减少干扰。 在1956年,Price和Green首次提出了RAKE接收机的概念,用于对抗多径衰落。随后,Forney提出...

    扩频多径信道下RAKE接收机的性能分析(matlab仿真)

    本文主要研究了扩频多径信道下RAKE接收机的性能分析,通过使用MATLAB软件进行仿真,比较了不同的合并方式和分集重数对RAKE接收机性能的影响。 首先,文章介绍了移动通信信道的基本概念,包括信道衰落和多径信道的...

    基于Halcon,鸟叔的spoke和rake函数

    鸟叔的`rake`函数可能增强了原功能,例如增加了对噪声的抑制,优化了圆形检测的精度,或者提供了更多的自定义选项以适应不同的圆形或圆弧检测需求。这对于制造业中的质量控制,如检测零件的圆度、孔径等非常关键。 ...

    短波通信中的Rake接收技术

    Rake接收技术通过对多径信号的识别和分离,来消除多径干扰,提高输出信噪比。 在Rake接收技术中,多径信号的识别和分离是关键步骤。该步骤可以通过相关解扩技术来实现。相关解扩技术是指对多径信号进行相关计算,以...

    RAKE关键词提取python代码

    使用时,首先需要导入`RAKE`模块,然后创建`RAKE`对象,加载停用词列表,接着对文本进行处理并提取关键词: ```python from RAKE import Rake # 创建RAKE对象 rake = Rake('SmartStoplist.txt') # 输入文本 text =...

Global site tag (gtag.js) - Google Analytics