作者:Ryan Daigle 来源:JavaEye   酷勤网收集 2008-05-29

摘要
  新的rails中activerecord拥有了检查record object是否有改变的能力,即dirty object. 你可以直接查询对象所有改变了的属性,如果你要使用attr=以外的方法改变对象属性的时候,可以使用attr_name_will_change!来告诉对象注意属性的变化

系列文章汇总《Ruby on Rails 2.1新特性

新的rails中activerecord拥有了检查record object是否有改变的能力,即dirty object.
这个功能非常简单灵活:

Ruby代码 复制代码
  1. article = Article.find(:first)   
  2. article.changed?  #=> false   
  3.   
  4. # Track changes to individual attributes with   
  5. # attr_name_changed? accessor   
  6. article.title  #=> "Title"   
  7. article.title = "New Title"  
  8. article.title_changed? #=> true   
  9.   
  10. # Access previous value with attr_name_was accessor   
  11. article.title_was  #=> "Title"   
  12.   
  13. # See both previous and current value with attr_name_change accessor   
  14. article.title_change  #=> ["Title", "New Title"]  


你还可以直接查询对象所有改变了的属性,(继续上例):
Ruby代码 复制代码
  1. # Get a list of changed attributes   
  2. article.changed  #=> ['title']   
  3.   
  4. # Get the hash of changed attributes and their previous and current values   
  5. article.changes  #=> { 'title' => ["Title", "New Title"] }  


注意: 如果你保存了一个dirty object,他就会清除所有改变的痕迹:
Ruby代码 复制代码
  1. article.changed?  #=> true   
  2. article.save  #=> true   
  3. article.changed?  #=> false  


如果你要使用attr=以外的方法改变对象属性的时候,可以使用attr_name_will_change!来告诉对象注意属性的变化:
Ruby代码 复制代码
  1. article = Article.find(:first)   
  2. article.title_will_change!   
  3. article.title.upcase!   
  4. article.title_change  #=> ['Title', 'TITLE']  

原文:http://ryandaigle.com/
来自:http://www.javaeye.com/news/2349

分类: .NET技术 网页设计 交互设计

上一篇:Ruby on Rails 2.1新特性   下一篇:Rails2.1新特性之四:Partial Updates