Ruby on Railsは、saveとudate uを使用します.atributesは、耐久化されたActive Recordオブジェクトを更新します.
2153 ワード
上記「Ruby on Rails、newとcreateを使ってActive Recordオブジェクトと彼らの違いを作成する」において、私たちは、RAls consolieを用いてモデルにアクセスしてオブジェクトを作成し、データベースに保存する.
今はどのようにして既存のオブジェクトを更新し、データベースに更新しますか?保存先と同様に、オブジェクトを更新する方法も2つあります.
一つは、最も一般的な方法は、オブジェクトの属性を直接更新して保存することである.new/saveメソッドを使ってオブジェクトを保存するのと同じですが、newのプロセスはfindや赋値操作に取って代わられました.
今はどのようにして既存のオブジェクトを更新し、データベースに更新しますか?保存先と同様に、オブジェクトを更新する方法も2つあります.
一つは、最も一般的な方法は、オブジェクトの属性を直接更新して保存することである.new/saveメソッドを使ってオブジェクトを保存するのと同じですが、newのプロセスはfindや赋値操作に取って代わられました.
save
RAls consolieを起動し、最初のステップは永続的なオブジェクトを獲得することである.私たちは前に作成しましたが、今はデータベースから彼を読み取ります.findコマンドは後から学びます.データベースの中のidが3の対象をsubject 3に割り当てて、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でオブジェクトを作成したり、保存したりするのと似ています.atributesは、属性設定と保存操作をステップに統合します.udateにいますatributesメソッドのパラメータには、変更するフィールド名と値が入力されます.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とこの編のudate_atributesメソッドが起動されると、成功したかどうかを示すbollan値が保存または更新されます.これは実はとても役に立ちます.例えば、フロントで記入したフォームを保存するには、フォームの保存に成功したかどうかをフィードバックする必要があります.これはデータの有効性チェックの範疇です.後で説明します.