前面瞭解了檢索的方法,這次來看看Active Record怎樣更新資料庫中的記錄。
如果你有一個Active Record對象(或許對應於order表),你可以通過調用save方法將它寫道資料庫中去,如果這個對象是先前從資料庫中讀取出來的,save方法將會更新既有的記錄,否則將會建立一條記錄。
如果一條既有記錄被更新,Active Record將會用它的主鍵和來匹配記憶體中的對象,Active Record對象中的屬性被更新到對應的列,即使一個列中的值沒有變化也會被更新,在下面的例子中,id為123的訂單所有的內容都會被更新:
order = Order.find(123)order.name = "Fred"order.save
不管怎樣,在下面的例子裡,Active Record對象只包含id,name,paytype,當對象被儲存的時候僅僅只有這些欄位被更新,注意如果你想要把對象儲存到資料庫,那麼在使用find_by_sql方法時,一定要包含id欄位。
orders = Order.find_by_sql("select id, name, pay_type from orders where id=123")first = orders[0]first.name = "Wilma"first.save
另外,Active Record還提供了update_attribute()方法,該方法可以將Model對象的某個屬性儲存到資料庫。
order = Order.find(123)order.update_attribute(:name, "Barney")order = Order.find(321)order.update_attributes(:name => "Barney",:email => "barney@bedrock.com")
我們可以把讀取和更新結合在一起,使用update()方法或update_all(),update()方法使用一個id和一組屬性,如果在資料庫中對應的記錄,就更新指定的屬性,然後返回model對象。
order = Order.update(12, :name => "Barney", :email => "barney@bedrock.com")
也可以傳遞一組id或者屬性和值的hash給update()方法,這樣會更新所有匹配的記錄,並且返回一組model對象。