Ruby on rails開發從頭來(五十)- ActiveRecord基礎(更新記錄)

來源:互聯網
上載者:User

前面瞭解了檢索的方法,這次來看看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對象。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.