自己写个gem叫change_log 水平有限欢迎斧正

本文介绍了一个用于Ruby on Rails项目的Change_Log Gem,它可以帮助开发者记录所有表中数据的变化情况,包括创建、更新和删除操作,以及执行这些操作的用户。通过简单的配置步骤,如安装、数据库迁移和模型设置,即可轻松启用此功能。
这几天把公司项目上的一些东西整理了整理,把能单独拿出来的东西都拿出来。写成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就修改了很多次。

再次感谢。
内容概要:本文介绍了一个基于MATLAB实现的无人机三维路径规划项目,采用蚁群算(ACO)与多层感知机(MLP)相结合的混合模型(ACO-MLP)。该模型通过三维环境离散化建模,利用ACO进行全局路径搜索,并引入MLP对环境特征进行自适应学习与发因子优化,实现路径的动态调整与多目标优化。项目解决了高维空间建模、动态障碍规避、局部最优陷阱、算实时性及多目标权衡等关键技术难题,结合并行计算与参数自适应机制,提升了路径规划的智能性、安全性和工程适用性。文中提供了详细的模型架构、核心算流程及MATLAB代码示例,涵盖空间建模、信息素更新、MLP训练与融合优化等关键步骤。; 适合人群:具备一定MATLAB编程基础,熟悉智能优化算与神经网络的高校学生、科研人员及从事无人机路径规划相关工作的工程师;适合从事智能无人系统、自动驾驶、机器人导航等领域的研究人员; 使用场景及目标:①应用于复杂三维环境下的无人机路径规划,如城市物流、灾害救援、军事侦察等场景;②实现飞行安全、能耗优化、路径平滑与实时避障等多目标协同优化;③为智能无人系统的自主决策与环境适应能力提供算支持; 阅读建议:此资源结合理论模型与MATLAB实践,建议读者在理解ACO与MLP基本原理的基础上,结合代码示例进行仿真调试,重点关注ACO-MLP融合机制、多目标优化函数设计及参数自适应策略的实现,以深入掌握混合智能算在工程中的应用方
学校新建了宿舍楼,共有 n 间寝室。等待分配的学生中,有女生 n 0 ​ 位、男生 n 1 ​ 位。所有待分配的学生都必须分到一间寝室。所有的寝室都要分出去,最后不能有寝室留空。 现请你程序完成寝室的自动分配。分配规则如下: 男女生不能混住; 不允许单人住一间寝室; 对每种性别的学生,每间寝室入住的人数都必须相同;例如不能出现一部分寝室住 2 位女生,一部分寝室住 3 位女生的情况。但女生寝室都是 2 人一间,男生寝室都是 3 人一间,则是允许的; 在有多种分配方案满足前面三项要求的情况下,要求两种性别每间寝室入住的人数差最小。 输入格式: 输入在一行中给出 3 个正整数 n 0 ​ 、n 1 ​ 、n,分别对应女生人数、男生人数、寝室数。数字间以空格分隔,均不超过 10 5 。 输出格式: 在一行中顺序输出女生和男生被分配的寝室数量,其间以 1 个空格分隔。行首尾不得有多余空格。 如果有解,题目保证解是唯一的。如果无解,则在一行中输出 No Solution。 输入样例 1: 24 60 10 输出样例 1: 4 6 注意:输出的方案对应女生都是 24/4=6 人间、男生都是 60/6=10 人间,人数差为 4。满足前三项要求的分配方案还有两种,即女生 6 间(都是 4 人间)、男生 4 间(都是 15 人间);或女生 8 间(都是 3 人间)、男生 2 间(都是 30 人间)。但因为人数差都大于 4 而不被采用。 输入样例 2: 29 30 10 输出样例 2: No Solution 感谢浙江警官职业学院楼满芳老师斧正数据! 代码长度限制 16 KB 时间限制 400 ms 内存限制 64 MB 栈限制 8192 KB
11-30
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值