Chen Yangjian's Blog

Carpe diem - Seize the day

使用 Rails 3 一二

| Comments

昨天把做的项目发布到测试机,RedHat Linux,出了个小问题。数据读取的时候都好的,插入的时候挂掉了,SQLite 说找不到数据文件。

`SQLite3::SQLException: unable to open database file
`

这个属于比较明显的权限问题。看数据文件的权限是没问题的,都已经是 777 了。后来才晓得是数据文件所在目录也需要加权限,真是土鳖了。看来 UNIX 神马的,要拾起来了。

另一则。

有个 model 储存的时候,希望如果只改了某一个属性的话,就绕过 before_save,Google 一下发现在 Rails 里头还真是 tmd 简单。有几个很方便的语法糖:

`model.<field>_changed? # true / false
model.<field>_was # orginal value
model.<field>_change # ['origin', 'new']

# 有变更的属性的列表
article.changed  #=> ['title']

# 有变更的属性的 map
article.changes  #=> { 'title' => ["Title", "New Title"] }
article.changed?  #=> true
article.save  #=> true
article.changed?  #=> false
`</field></field></field>

如果属性变更不是通过 attr= 方式调用,但又想让 model 知道有改动的。还可以调用

`model.<field>_will_change!
# 如
article.title_will_change!
article.title.upcase!
article.title_change  #=> ['Title', 'TITLE']
`</field>

Rails 在这方面真是越走越远了。当初第一次看到 6.hours 之类的语法时,直接晕菜的想法都有了。

Comments