Re: migrations不止可以更性感,还可以更感性,甚至更个性

[quote="rainchen"]
更性感的migration:
class User < ActiveRecord::Base  
fields do
name :string, :null => false
email :string
about :text, :default => "No description available"
end
end

[/quote]

我还看到这样做的一个好处,更有利于Aspect Programming。

比如,Model假删除:现在Rails里的Model.destroy就是从数据库里彻底删除,我想把系统里的几个模型做成假的删除。就是把is_active字段设为false,find也找不到它。

要做到find找不到假删除的记录,只要hack一下ActiveRecord::Base就行了,但是is_active字段还是要一个个数据表里去加的。

如果把数据库字段也定义在Model里,就可以在一个插件里一揽子解决这个问题。

做一个插件,先添加一个is_active字段,default设为true,然后hack一下find,还要hack一下destroy。起个名字,比如acts_as_fake_delete。然后在需要的Model里call一下就都搞定了。

DRY的好处之外,是代码有意义。

实际项目的数据表中有不少功能性字段,比如Rails考虑到的created_at, updated_at,is_locked,再比如Rails没考虑的is_active,created_by, updated_by等等,都可以用插件抽象出来。

期待这个变化。

----
论坛中楼主回帖误解了我的意思,再多解释一下:

这样的例子在企业级应用里很常见,大量的数据表要有created_by(user_id),is_active,created_at这样的字段。

再举一个例子,每次用到created_by的话,都要先写migration,再在model里定义belongs_to :created_by_user, :class_name => 'User', :foreign_key => :created_by;还要before_save的时候设置self.created_by = current_user.id;以及controller/view上CRUD的一整套东西。现在因为必须用migration定义field,这个 “repeat yourself”的逻辑就不能彻底抽出来,做到增减随意。
----

更多讨论:http://www.iteye.com/post/387093
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值