这几天把公司项目上的一些东西整理了整理,把能单独拿出来的东西都拿出来。写成gem,这样公司其他的项目就可以方便使用了。
change_log,也叫maintenance log. 意思就是保存所有表中数据的修改。包括谁在什么时间创建/修改/删除了哪些东西。
应用环境:
例如,公司有个会计系统。如果哪天你看见有一个账目变的非常奇怪,好像跟你之前看到的不大一样。
可以调出所有的change_log。一看,原来是小谁家的小谁把某个数改了。找到了元凶。
可能应用面不是很广,但是放在这里还是请大家斧正斧正。
rubygems 里面有类似的gem. 在这里我不想讨论谁抄了谁的理念。
只想把自己的东西越弄越好,说不定能帮助其他人。
谢谢
下面是用法:
1 安装:
# console window
gem install change_log
# environment.rb
config.gem 'change_log'
或者 用 bundler
# Gemfile
gem 'change_log'
# console window
bundle install
2. Database Table
创建一个migration file:
注意: 名字可以随便起,只要在environment.rb里面重新声明就可以。
class AddChangeLog < ActiveRecord::Migration
def self.up
create_table :change_logs do |t| # feel free to choose another table name
t.integer :version, :null=>false # store version of each change
t.string :record_id,:limit=>30 # store the actual record id
t.string :table_name, :limit=>60 # store the table name
t.string :attribute_name,:limit=>60 # store the column name
t.string :user, :limit=>20 # store the user who made the change
t.string :action, :limit=>6 # store the change action: create, read, update, delete
t.text :old_value # the value before change
t.text :new_value # value after change
t.string :field_type, :limit=>30 # the column type eg. date, text, varchar, int etc
t.timestamps
end
end
def self.down
drop_table :change_logs
end
end
然后:
#console window
db:migrate
3. 应用
在你想要保存修改记录的model里加上这个:
enable_change_log :ignore=>[:updated_at,:user_password]
用ignore来声明那些不想被保存的column.
在application controller 里加一个current_user 方法:
def current_user
return session[:user] # replace this with your own code
end
这样的话,在controller 和helper里面的所有CRUD都会被记录下来。
如果,你在model中进行修改的话。 例如:
# this is a model file
def making_some_changes
user = User.find(:first)
user.website = 'www.iteye.com'
user.save
end
你可以用whodidit这个属性。这个是change_log自动添加进去的。
# this is a model file
def making_some_changes
user = User.find(:first)
user.website = 'www.iteye.com'
user.whodidit = 'javaeye' # 这样就可以了
user.save
end
4. 列出已经保存的修改记录
用 ChangeLogs model,来调用修改记录。
# List all changes
ChangeLogs.find(:all)
# List all changes for table 'accounts'
ChangeLogs.find(:all,:conditions=>['table_name = ?', 'accounts'])
5. 如果你想用别的表名。 那就修改migration文件。
然后在environment.rb里面声明:
# config/environment.rb
ChangeLogs.set_table_name('maintenance_logs')
6. 一些连接:
Rubygems: https://rubygems.org/gems/change_log
GitHub: https://github.com/peterzatncs/change_log
7. 参考资料
http://railscasts.com/episodes/245-new-gem-with-bundler
http://docs.rubygems.org/read/chapter/20
最后,欢迎任何批评和斧正。
我必须承认有很多地方还不足。光是一个Readme就修改了很多次。
再次感谢。
分享到:
相关推荐
我的编程笔记 程序员 :laptop_computer:生涯的技术笔记 技术为主 :wrench: 乱七八糟 :reminder_ribbon: 注意参考 :open_book: 下载 ...用法 :page_with_curl:使用...欢迎斧正 :axe: 。 沟通联系 :envelope_with_arrow:
在资料浩瀚的互联网中,却找不到一份最新的Mysql4.0.13与Tomcat4.1.24的整合配置文档。 在自己工作之余,总结了自己搭建JSP环境的实际经验并参照以前版本Mysql、Tomcat相关配置文章...水平有限加之时间仓促,欢迎斧正!
本篇文章将深入探讨如何在.NET Core 3.1中获取配置文件,并介绍一个已经编写好的类库,方便开发者直接使用。 首先,我们了解.NET Core 3.1中的配置体系架构。它基于`Microsoft.Extensions.Configuration`包,提供了...
分享一下自己做的关于通信原理白噪声的程序-band_writenoice.slx 分享一下自己做的关于《通信原理》白噪声的程序,望高手斧正。
因此,我打算重制(也许重制,也许重制,不如叫reforge吧)这个系列,面向使用Apple Silicon Mac的开发者,系统介绍AArch64架构的汇编语言的入门知识。 HTML版本:...
Summary: xml4wrapper 3.6.2, 支持libxml2-2.7.8 或 ...另外,由于作者水平有限,bug在所难免, 若您在使用过程中发现任何bug,作者将非常欢迎您斧正,并通过电子邮件联系到作者(xseekerj@163.com)。 Good luck.
"欢迎其他同行斧正"表示作者开放了源代码,希望同行进行审查和改进,这表明该项目是一个开源项目,可能在GitHub或其他代码托管平台上发布。 【标签】中包含了"chat_room_.net"、"java_net"、"源代码"、"聊天室"和...
关于jeasyUIAPI的 CHM版本: 译者的话:一直就想自己翻译一点技术资料,免费给大家参考使用。但是要么有的资料篇幅过长,本人精力...限于译者的水平,文档中难免有错误疏漏之处,还望广大读者不吝斧正,不甚感激! 译
高压直流输电(HVDC)技术是电力系统中的一种重要技术,它可以将电力从一个点传输到另一个点,具有高效、可靠、灵活等特点。HVDC技术的发展历史可以追溯到1882年,当时德国物理学家Graf von Siemens首次提出使用直流...
这是个测试字符和字符串的实验代码,请斧正,通过理解正规式、有限自动机原理,编制一个词法分析程序。此程序应具有如下功能: (a) 将C程序中所有注释字母均大写;(即在注释对/*…*/之间的所有字母。) (b) 将C...
0积分下载,欢迎斧正,感谢赐教。 主要实现: 1 根据光电传感器模拟获取当前车流量 2 STM32端可以根据周期内车流量大小调整红绿灯的时间 3 红绿灯时间和倒计时会在STM32端的显示屏上显示 4 红灯和绿灯在最后五秒会...
如有疏漏多多斧正。 例子的功能就是在标准的qt主窗口加载一个谷歌地图。webkit在(0,0)放置一个图标。地图移动后通知Qt在标准输出打印经纬度。 因为以前上传资源的时候有人说我上传的不能编译。这里说明一下,我...
这是小白第一次写博客,有什么错误和不严谨的地方还希望大家多多斧正。 最近在B站看了一个小哥从youtube搬来的一个视频,自己就照虎画猫跟着敲起了代码,接下来我就给大家介绍一下基本流程步骤,自己也学习学习。 ...
不能传播病毒了,这是本人愚见,欢迎斧正。 这个程序主要做两件事:第一把U盘上所有的隐含文件和文件夹变成正常可见的,因为病 毒往往把自己隐藏起来。第二把U盘上的可执行文件的扩展名改成.zou,让可执行文件不能...
VSFlexGrid Pro 8.0 是一款功能强大的数据...本手册为全文翻译,并经过全文复查,内容没有遗漏,但限于本人的英语水平和计算机知识水平(均未达到业余爱好的水平),文中错误在所难免,在此,希望大方之家不吝斧正。
VSFlexGrid Pro 8.0 是一款功能强大的数据...本手册为全文翻译,并经过全文复查,内容没有遗漏,但限于本人的英语水平和计算机知识水平(均未达到业余爱好的水平),文中错误在所难免,在此,希望大方之家不吝斧正。
2.由于绕过了spring和Struts,请求没有经过封装的事物管理器实例化,无法直接调用数据库,(除非想自己写一套JDBC),所以需要配置特有的实例化对象供调用。 3.返回报文的封装。 该txt中包含了本人开发的所有步骤,...
使用线性代数的线性方程解法解二元一次方程 欢迎斧正
很多工具生成的Css 都是多行的,很占用空间,于是写了这个格式化工具,将一个样式格式化为一行。 如有不足之处 敬请斧正! 例如: .UserLogin_7{ width:213px; height:45px; clear:both; margin-left:0px; ...