特定のレコードを増加させるRailsのメソッド「increment」

こんにちは!kossyです!




さて、今回は、Railsのメソッドであるincrementの使い方とユースケースについて、ブログに残してみたいと思います。




使い方

基本的な使い方はこうです。

Model.increment(:attribute, value)

モデル(本体でもレコードでもOK)の属性に対して呼ぶことで、値を増加させることができます。




ユースケース

ECサイト等で、在庫の変動調整なんかに使えるんじゃないでしょうか。

items.each do |item|
  item.increment!(:stock, -1 * purchase_count) # decrementでもよくね?とか言わないでね☆
end

increment!とすると、saveメソッドを使わなくても値の変更を永続化できます。

外野から何か聞こえてきたので注意書きを入れましたが、ユースケースのイメージとしては
こんな感じではないでしょうか。




参考にさせていただいたサイト
increment - リファレンス - - Railsドキュメント
Rails5 で `#increment!` と `#decrement!` が同時実行を意識した処理になった! - Qiita
意外と知らないかもしれないRuby, Railsのメソッドとか - Qiita

JavaScriptの!!(エクスペラメーションマーク)2つはオブジェクトをBoolean化(真偽値化)できる

こんにちは!kossyです!




アウトプット、意識しないと本当にサボりがちになってしまいますね、、、
しょーもない事でもいいから、何かしらブログに残していきたいと思います、、、




さて、今回は、JavaScriptのあまり見かけない文法をご紹介します。




!!でオブジェクトを真偽値化できる

他言語ではあまり見かけませんが、JavaScriptでは、
!!を二つ、オブジェクトや変数の前につけると、真偽値にすることができます。

f:id:kossy-web-engineer:20190419223133p:plain

こんな感じですね。
ユースケースがあまり思い浮かばないですが、、、



なんで紹介したん??

Vue.js 入門に!!を用いたコードを紹介していたから、ですね。

こんな感じのコードです。

const hoge = fuga => !!fuga.trim()

hoge関数の引数の値を真偽値化してる感じですかね。
真偽値で返り値を受け取りたい時なんかに使えそうな気がします。




参考にさせていただいた記事
JavaScriptの謎コードまとめ - エフアンダーバー
JavaScriptで!!(エクスクラメーションマーク2つ) | ブログ | ペンギンパレット-横浜のウェブサイト・ホームページ制作
【JavaScript】!!(ビックリマーク2つ)って何? | 衣食住よりプログラミング

Railsでlibディレクトリをautoload対象に含める方法

こんにちは!kossyです!




さて、今回は、各種ライブラリやRakeタスクファイルを配置する用途でよく用いられる、
libディレクトリ内のファイルをautoload対象に含める方法について、
ブログに残してみたいと思います。





そもそもautoloadってなに?



命名規則に則ったファイルを自動でrequireしてくれる機能」のことです。

クラス名をキャメルケース(userItemのように2語目の先頭が大文字)で記述したり、
ファイル名をスネークケース(user_itemsのように単語と単語をアンダーバーで繋ぐ)で記述する等の規則に
準じて命名されたファイルをautoでrequireしてくれるというわけです。

デフォルトでautoload_pathsに含まれているのは、

  • app/controllers
  • app/models
  • app/helpers
  • app/mailers
  • app/controllers/concerns
  • app/models/concerns

の6ディレクトリです。


デフォルトではlibディレクトリはautoload_pathsに含まれていないので、
config/application.rb内で明示的にlibディレクトリをautoload_pathsに含むように
記述する必要があります。

以下実装です。

# 省略

  class Application < Rails::Application

# 省略

    config.autoload_paths += %W(#{config.root}/lib)

  end

これでrailsアプリの立ち上げ時にlibディレクトリがautoload_pathsに含まれるようになります。