Ruby on Rails,使用save和update_attributes更新持久化的ActiveRecord對象


上文《Ruby on Rails,使用new和create創建ActiveRecord對象及他們之間的區別》中我們使用rails console訪問模型創建對象並將其保存到數據庫中。

現在我們學習如何更新已經持久化的對象並將修改更新到數據庫。與保存對象類似,更新對象也有兩種方法。

其一,最常規的方法是直接更新一個持久化對象的屬性,然后將其保存。感覺和使用new/save方法保存對象差不多,只不過new的過程被find 或賦值操作替代了。

找到持久化對象的引用  
手動設置對象屬性    
save方法將對象保存    

啟動rails console,第一步是獲取一個持久化對象。我們之前創建過了,現在從數據庫中讀取他,find命令后面會學到。將數據庫中id為3的對象賦值給subject3,打印一下name屬性,更新name屬性,保存。

irb(main):006:0> subject3=Subject.find(3)  
  [1m[36mSubject Load (27.0ms)[0m  [1mSELECT `subjects`.* FROM `subjects` WHERE `subjects`.`id` = 3 LIMIT 1[0m  
=> #<Subject id: 3, created_at: "2012-09-04 17:07:34", updated_at: "2012-09-04 17:07:34", name: "abbuggy", position: "co
der">  
irb(main):007:0> subject3.name  
=> "abbuggy"
irb(main):008:0> subject3.name="tom"
=> "tom"
irb(main):009:0> subject3.save  
  [1m[35m (14.0ms)[0m  BEGIN
  [1m[36m (63.0ms)[0m  [1mUPDATE `subjects` SET `name` = 'tom', `updated_at` = '2012-09-05 14:41:37' WHERE `subjects  
`.`id` = 3[0m  
  [1m[35m (63.0ms)[0m  COMMIT  
=> true
irb(main):010:0>  

另一種方式和用crate方法創建及保存對象很類似,叫做update_attributes,將屬性設置和保存操作整合為一步。在update_attributes方法的參數中將要修改的字段名和值傳入。

irb(main):016:0> subject4.update_attributes(:name=>"jerry")  
  [1m[35m (0.0ms)[0m  BEGIN
  [1m[36m (33.0ms)[0m  [1mUPDATE `subjects` SET `name` = 'jerry', `updated_at` = '2012-09-05 14:50:15' WHERE `subjec  
ts`.`id` = 4[0m  
  [1m[35m (37.0ms)[0m  COMMIT  
=> true
irb(main):017:0> subject5=find(4)  
irb(main):019:0> subject5.name  
=> "jerry"

上一篇中的save,create和這一篇中的update_attributes方法調用之后都會返回一個表明保存或更新是否成功的boolean值。這個其實挺有用的,比如你要保存一個前台填寫的表單,需要對表單是否保存成功做出反饋。這是數據有效性檢查的范疇了,后面會講到。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM