友人とともにRails勉強会に参加してきました。
参加者のみなさんや、発表内容はこんな以下のurlを参照してくださいな。
第6回スタートアップRails勉強会 - connpass
Ruby on RailsのTutorialで使用されている、update_columns
。
そして似たような処理に見える update_attributes
があります。
この二つの違いについて調べてみたことをまとめます。
検索するとqiitaの以下の記事がでてきますね。
どうもこちらの記事によるとバリデーションやコールバックの違いがあるようです。
ActiveRecord の attribute 更新方法まとめ - Qiita
しかし!
最近よく言われますが、公式ドキュメントを参照するのが一番です。
なに?英語が読めない?
読めるようになればいいだけです。
そして読めるようになるには、読む練習が必要です。(自分に言い聞かせる)
ということでこちらも目を通しましょう。
- Validation is skipped.
- Callbacks are invoked.
- updated_at/updated_on column is updated if that column is available.
- Updates all the attributes that are dirty in this object.
これは,
太字の二つは他のメソッドと異なる場合が多いので注目ですね。
こちらは上記のs
がないバージョンですね。
update
は、エイリアスでupdate_attiribute
と同様の処理となります。
動きが結構違うのでしっかりと見ておきましょう。
ここがポイントです。
また、複数のカラムを同時に更新できるため、タイミングを同じタイミングで更新したいカラムがある場合にはこちらを使用します。
最後に、update_columns
です。
Rails Tutorialででてきましたね。
公式ドキュメントによると、
-validations are skipped. -Callbacks are skipped. -updated_at/updated_on are not updated. -However, attributes are serialized with the same rules as ActiveRecord::Relation#update_all
とのことです。
updated_at
などに残らない(更新されない)4つ目については、update_all
の箇所で以下のように示されています。
However, values passed to update_all will still go through Active Record’s normal type casting and serialization.
キャストとシリアライズが行われる、となっていますね。 シリアライズというのは、配列のままDBに保存する時などに行われる変換のようです。
以下の2行の書き換え例ですね。 Tutorialでは、columnsを使っていました。
update_attribute(:activated, true) update_attribute(:activated_at, Time.zone.now)
update_columns(activated: true, activated_at: Time.zone.now)
update_attributes(activated: true, activated_at: Time.zone.now )
基本的にはvalidationとcallbackが行われる、
update_attributes
を使用しましょう!
Rails Tutorial 11章,12章
伊豆大島へと旅行している間にbitcoinがかなり大幅にレートの変動がありました。笑
bitcoinの購入して直後になんてこったい・・・w
そもそもbitcoinってなんやねん!って人はこんな感じ。
ビットコインとは、インターネット上で取引や通貨発行(「採掘(マイニング)」と呼ばれる。) が行われる「分散型仮想通貨」のことです。 政府や中央銀行などの中央機関を介さず、また、P2Pネットワーク上で取引が行われるため、取引の仲介手数料が低く抑えられ、迅速に世界中のどこでもだれとでも貨幣取引を行うことができます。
引用元 : ビットコインの解説 | Bitcoin日本語情報サイト
といっても自分もそこまで詳しいわけではありませんので、あしからず。
いろいろVALUというサービスが出てきたり、仮想通貨やブロックチェーンなどに興味はあったので、じゃあとりあえずやってみるか、と入金して購入してみていました。
売り買いでどんな感じだろうなーと。
株もやったことがないので、ある意味初めての取引経験となりました。
bitcoinは1bitcoinが28万程度で取引されるほどになっていました。 自分が買ったのは、27万くらいのレートの時。
すると旅行へレッツゴーと、出かけているとtwitter暴落っていう文字が踊っており、確認するとえらいこっちゃ!
現在は22万円ほどまで変動しているみたいですね。
数%の変動とかいうレベルの変動じゃありません。
これは、、、ある意味チャンスなのでしょうか・・・(わからない勢)
人生最初で最後の社会人3連休であったため、旅行に!
東京から2泊くらいできて、この後の夏旅行に備えてそれなりの費用で楽しめる場所を友人と探すと、
「島いいんじゃね?」と提案してくれ、いろいろあって行くことができました。
実は、ネット情報で確認した時は満席だったのですが、電話確認でチケットがあいている!と。
ということで当日にチケットを確保し、宿もなにもかも決めずにバックパック1個しょってレッツゴー。
最悪宿がなくても公園で寝ようスタイルですね。笑
すると、なんやかんやでレンタカーがみつかって車中泊するかぁーと温泉行ったりラーメンすすっていると、
現地の人と出会っていろいろ話しているうちに「宿ないならうちにくるかい。」的な流れでまさかのお泊りさせていただくことに 。
なんてこともあり、思い出に残る旅になりました。
いきあたりばったりって、よくないことも多い(と、捉える人が多い)ですけど、自分は結構好きですね。
結果論でしょうけど、その場その場で体感できる体験がめっちゃおもしろいです。
伊豆大島で一番の見所は!と言われると、「裏砂漠」と呼ばれる砂漠地帯がかなりおすすめ。
そうそう日本じゃみられないような光景を目にすることができます。
要レンタカーで車でブイーンといけるポイントにあるので、地図を片手に行ってみてほしいです。
Rails TutorialをRSpecを導入し、11章のMailerの部分でのエラー対処について minitestではないため、対応が必要となります。
進めていると、Mailerのpreviewの時にエラーが発生していしまいました。
http://localhost:3000/rails/mailers/user_mailer/account_activation
につないでみるとこのようなエラーがでています。
uninitialized constant UserMailerPreview::UserMailerMailer
# Preview this email at http://localhost:3000/rails/mailers/user_mailer/account_activation def account_activation UserMailerMailer.account_activation end # Preview this email at http://localhost:3000/rails/mailers/user_mailer/password_reset
このエラーの原因は、
test/mailers/previews/user_mailer_preview.rb
にあるファイルを変更しているためにエラーです。
user_mailer_preview.rb
は、
spec/mailers/previews/user_mailer_preview.rb
にあるファイルを置き換えましょう。
specをたどるようになっているはずですので。
bitcoinでの取引、始めました。
ちょっとずつ額を増やしつつ成長してほしいもんです。笑 最初知識入れないとなんともっていうところですけど、とりあえずやってみたという経験が大事だと思うので!
エンジニア研修の方は、必死にサービス開発をがんばっております。 ユーザ認証周りが、結構理解していないと作るのが大変ですね。
Ruby on Railsのtutorialはほんとにすごいなーと復習しつつ実装中。
今日はお昼と晩飯におそばを食べてしまいやした。 そばdayだな。
そしてやっと風邪がなおってまいりまして、体調が回復傾向に。 体が元気なだけでかなり楽だなぁ。健康はかなり大切。
技術的なやっていることをまとめる時間がほしいなーなんて思いつつ、どっかでスケジュールにいれないとやらないね。笑
RSpecの1行目の書き方のメモ。
基本的には自動生成されるので困るポイントではないと思いますが、
requestsのスペックなどを書こうと思うとこちらの知識が必要になるかもしれません。
RSpec.describe User, type: :model do
この部分のUser
とかは、
クラス名を書きます。
コントローラであれば、
RSpec.describe SessionsController, type: :controller do
という感じ。
それぞれファイルの1行目を見ることでチェックが可能です。
要は、このspecは、何をテストしますよ、という明示となるわけですね。
ちなみに、
describe 'Sessions', type: :request do
のように、 ' '
でくくってあげると任意の文字列で表現してあげることができるようです。
結構悪化していましたが、なんとか乗り越えられそうです。
風邪というか、疲れ的な感じでした。
まずはポカリ、ウィダーをがぶのみして寝ます。
ちょっと汗かく感じで布団をかぶって寝ます。
それでも治らない場合はベンザブロックも併用します。
さらに、睡眠時間を1,2時間増やします。
とにかくポカリ飲みながら寝ます。
病院へ行きます。
病院へ行った、という思い込みで基本的には良い方向へ向かいます。
そして病院でもらえる薬は市販のものよりも強力であるため、効きます。
寝ます。
治ります!!!!!
今回は鼻水が滝のように出ていて、結構きつかったのですが、なんとか治りそうです。
しかも耳が遠くなってましたw
鼓膜的なのが張っていない感覚になっておりました。重症かて。
割と社会人で体調崩すと、業務後に空いている病院を探すのも大変だし、
東京のお医者さんはなんだか冷たく、作業感を感じるし(早くていいけど)
不便で大変だなーと思うところ。
荷物の受け取りとか、ご飯とか、病院とか夜に社会人用にやっていてほしいものです。 もちろん働く人も大変だけど、普通に需要あるよなぁ、と。
体調悪かったらおやすみいただいて病院いけっていうのもありますが。笑