見出し画像

備忘録17:Rails-カラムを上書き・更新する

転職のための3月6日から某スクールにでプログラミング学習を始めた32歳のおっさんです。時系列でHTML⇨CSS⇨Rails & JavaScript &SQLを学習中。
最近C#とPHPにも興味が湧いてきた。


1:開幕の自問自答

①カラムの上書き処理がしたいでござる。
 ⇨普通にupdate処理じゃあダメなんですか?
②ダメでござる。
 ⇨何がダメなんですか?
③購入に合わせて在庫を減らすとか、そう言うのがしたいでござる。
 ⇨なるほどですね。
④他にも出品の強制終了とか、そう言うのが欲しいでござる。
 ⇨なるほどですね。では作りましょう。
⑤やったぜ!


2:環境

OS:Mac BigSur
Rails:6.0.0



3:全体の流れ

①やりたいことの確認
②コントローラーを編集する
③確認
④余談
⑤終わりに



4:やりたいことの確認

スクリーンショット 2021-06-28 23.28.11

元のデータを何か別の操作を行う際に書き換えたい。
SSで言えば実装したいことは以下3つの流れです。

①元の在庫が1000ある。
②100個購入した。
③元の在庫表記を900に更新したい。

調べたらとてつもなく簡単でした。
方法を見ていきましょう。



5:コントローラーを編集する

スクリーンショット 2021-06-28 23.29.43

・レコードのカラムを上書き・更新する方法

①updateメソッド
インスタンスの中身をハッシュ形式で書き換えることが出来る。
インスタンス.update(カラム1: 更新したい内容, カラム2:更新したい内容)
上記のように記述することで、一度に複数のカラムを更新できる。

※派生
②update_attributes
updateと同じ。なんかこう、ニュアンス的に分かり易い気がする。
どちらを使うかはお好み。


③update_columns
updateの更に強いメソッド。SSではこちらを使っている。
記述の方法は①〜③まで全て同じ。
update_columnsの利点は、直接SQLを操作するためバリテーションを無視出来る。
※後記載SS

スクリーンショット 2021-06-28 23.51.38

このように記述する。
今回のバリテーションではstockが最小値1に設定されており
このままupdateやupdate_attributesを使用すると在庫が最小1になる。
※在庫100に対して、購入数1000000にしても1になる。

そのためupdate_columnsが大変便利。



6:確認

スクリーンショット 2021-06-28 23.30.45

無事に更新が反映出来ました。
これで在庫が自動で管理されるのでユーザーもとても楽になりますね。



7:余談

スクリーンショット 2021-06-29 0.09.02

今回の処理を使って、こんな感じの実装を行いました。
最初は普通に出品取り下げで良いかな〜と思ってましたが
簡単に削除出来ちゃうと悪意のある利用を防ぎにくいかなって。
なので削除では無く「非表示」と言う手法を取っています。

トラブルに対する調査のしやすさも大事なんじゃあないかなぁ。
と、勝手に想像しております。
実際がどうなのかはまだ分かりませんが。




8:終わりに

上書き処理って、updateアクションでしか出来ない物かと思ってました。
全然そんなことありませんでした。
「実装したいことは方法を考えるより先に調べてみる。」
とても大事なことだなぁと実感しました。
全然全くさっぱり違う、とてもめんどくさい方法を考えていたので。

もちろん、問題解決の為に考える力は超重要ですが
かと言って簡単に済む物をわざわざ時間かけてやる必要は無いですからね。
素早く、そして簡単に済むならそれに越したことはないと思うので。

良い勉強になりました。
今回は以上です。





終わり!!!!!!!!!!!!!!!!

この記事が気に入ったらサポートをしてみませんか?