このエントリーをはてなブックマークに追加

2017年2月2日木曜日

はじめの一歩 -Rails ActiveRecord編- UPDATE


どうも、はじめです。
前回はJOINについて書いてみました。
はじめの一歩 -Rails ActiveRecord編- SELECT4
今回はUPDATEに関して書いていこうと思います。


はじめに


今回も前回と同じテーブルを使用しようと思います。
usersテーブル
[id: 1, user_name: 'Aさん'],
[id: 2, user_name: 'Bさん'],
[Id: 3, user_name: 'Cさん']

itemsテーブル
[id: 1, item_name: 'Rubyの本'],
[id: 2, item_name: 'Railsの本'],
[id: 3, item_name: 'PHPの本']

user_itemsテーブル(userが持っているitemを管理するテーブル)
[id: 1, user_id: 1, item_id: 1],
[id: 2, user_id: 1, item_id: 2],
[id: 3, user_id: 2, item_id: 3]

関連性
user : user_item => 1 : n
item : user_item => 1 : n


UPDATEを行うには主に以下の二つの方法があります。
・saveメソッドを使用する。
・updateメソッドを使用する。

でははじめに【saveメソッド】を使用した方法から書いていきます。


save


user_itemsを以下のように変更したいと思います。
[id: 3, user_id: 2, item_id: 3]
↓
[id: 3, user_id: 3, item_id: 3]

1.変更したいモデルインスタンスを取得
user_item = UserItem.find(3)

2.変更したい値を代入
user_item.user_id = 3

3.代入が完了したら登録
user_item.save

以上の手順でupdateが完了します。
2で複数のカラムを変更することも可能です。


次に【updateメソッド】を使用した方法を書いてみます。

update


updateでも同様にuser_itemsを以下のように変更したいと思います。
[id: 3, user_id: 2, item_id: 3]
↓
[id: 3, user_id: 3, item_id: 3]

updateメソッドを使用する際も2つの方法があります。
一つはsaveメソッドと同じように変更したいモデルインスタンスを取得し、
updateという流れになります。

user_item = UserItem.find(3)
user_item.update(user_id: 3)

もう一つは一度変数にインスタンスを取得するという工程を飛ばす方法です。

UserItem.find(3).update(user_id: 3)

どれも結果は同じになります。


まとめ


updateをする際変更したいレコードがreadonlyになっていた場合や、
validation等の関係で更新が失敗する場合があります。
その場合の対処法等を次回書いてみようと思います。

0 件のコメント:

コメントを投稿