カクカクしかじか

技術的なアレコレ

Ruby on Rails

mongoidはデフォルトだとモデルにcreated_atとupdated_atが存在しないので追加する方法

問題 Railsでmongoidを使用した場合、デフォルトのままだと当たり前にあると思いがちな created_at と updated_at が存在しないモデルが生まれます。 今回はこれの追加方法について触れてみます。 解決法 モデルのファイルに include Mongoid::Timestamps を…

Docker環境のmongoidを使ったRailsアプリでDBに接続出来ないときの解決法

経緯 現場Railsのタスク管理アプリをDocker環境+mongoidで作っていて、タスクの保存画面を作成していたところ、タスクのcreateでエラーに遭遇しました。 発生したエラー Docker環境上でRailsのDB(MongoDB)に接続出来てなさそう... 発生環境 Docker for Mac …

RailsコマンドからORMを介さずにDBコンソールに直接アクセスする方法

rails dbconsoleコマンド知らなかった... 普段ActiveRecordと無縁の開発をしているので、ActiveRecordを使った開発で使うようなコマンドを知らなかったので、恥ずかしながらここにまとめますw rails dbconsole 使用しているDBそのもののコンソールを開くこと…

Docker環境でbetter_errorsを起動させるための設定

以下の記述を記載するだけ config/environments/development.rb if Rails.env.development? BetterErrors::Middleware.allow_ip! "0.0.0.0/0" end "0.0.0.0/0" ってなんだろう? docker-compose.yml でバインドしたIPのこと version: '3' services: web: bui…

Railsのモデル名.human_attribute_name(:カラム名)って何だっけ?

はじめに 業務でRailsをいじっているものの、1からセットアップするとなるとよく分かってないで使っている部分の多さに毎回驚きます... 今回もその一つのRailsの日本語化の部分を備忘録として投稿します。 Railsのモデル名.human_attribute_name(:カラム名)…

Docker環境でRailsのルーティングを確認する方法メモ

はじめに 通常のローカル環境と同じように rake routes でルーティング確認しようとしたらうまく行かなかったので、その解決メモ。 やり方 通常の rake routes を docker環境で打ちますよ!というコマンドに変えてあげればOK! docker-compose run web bundl…

普段slimを使わない人のためのerbとの比較メモ

はじめに 現場Railsをちまちま進めているのですが、普段の仕事でerbファイルを使っていてslimの記法に全く慣れないので自分用のメモとして放流します。 erb記法との比較表 erb slim <%= notice %> = notice <% if flash.notice.present? %> - flash.notice.p…

OSS初心者がRailsにプルリクエストを送ってマージされるまでの一部始終

qiita.com

Railsでミドルウェアの読み込み順序を変える方法

ミドルウェアって? OSとアプリケーションの間に入って動作するソフトウェアのこと。 現在のRailsアプリのミドルウェアの状態を知りたいときは? bundle exec rake middleware コマンドをアプリディレクトリで打てばOK (Rails4系も5系も同じ) $ bundle exec …

Railsコンソールでの変数代入時の豆知識

内容 Railsコンソールでデータをいじる時に、加工したい値を別の変数に移してデータを変更することがよくあると思います。 そんなとき、変数名 = モデル名.find("ID")ってやらなくても良いんだぜ!というのが今回の内容です。 通常通りだと以下のような感じ…

Docker環境のRailsアプリでbootstrapに関わるnode.jsのコンパイルに失敗する問題の解決法

前提 現在、 現場Rails のタスク管理アプリをDocker環境かつMongoDBに置き換えて作っている状況です!(現場Railsの Chapter3 の部分に該当) 本の中のChapter3のbootstrapを入れて動かす部分で動作確認をしていると Autoprefixer doesn’t support Node v4.8.2.…

Dockerでコンテナ内にbundle installされない問題の解決法

前提 こちらの記事はDockerに対して不慣れな人間が書いているので、そらそうやろ!という内容が含まれます。 それでも個人用メモとして放流します。 技術要素 Rails 5.2.2.1 Ruby 2.5.1 mongodb 4.0.6 Dockerを扱うディレクトリ構成 アプリディレクトリ/ Gem…

RSpecのshared_contextで共通処理を1ヶ所にまとめる

はじめに RSpecにはテストで毎回同じ処理を書かなくても良いように処理を共通化する shared_context という仕組みがあります。 自分は直近まで知らなかったので、個人的なメモとして投稿します。 注記 サンプルコードは適当に用意したコードなので実在のコー…

mongoidのfind_or_initialize_byメソッド

はじめに find_or_initialize_by メソッドを知らなかった自分用メモに投稿させて頂きます。 なお、mongoidのコンソールログは量が多いので割愛し、ActiveRecordの例の時だけコンソールの表示を記載してあります。 find_or_initialize_byとは? 存在したらそ…

Railsで同一アクション内でHTTPメソッドの種類によって分岐をしたい場合の実装方法

今回のお悩み 同じURLでGETで呼ばれた時とPOSTで呼ばれた時で、同一アクション内で処理を分岐したい... 検証環境 Rails 4.2.9 (Rails5でも動くと思う) 答え requestオブジェクトのHTTP判定メソッドで分岐出来る! 実装例 routes.rb get '/register' => 'user…

Railsアプリのrequest内容の確認で使えるメソッドについて

概要 Railsのコントローラー側でリクエストのあったドメインに関する判定を実装する度にrequest関連メソッドをググってるので、いい加減覚えようと... 確認Railsバージョン Rails 4.2.9 (これらメソッドはRails5系でも変わってない認識) 前提 hoge.test.dev:…

RailsアプリでUserAgentがbotかどうかを判定するのに便利なgem 'browser'

概要 アクセスがbotかどうかを判定する便利なgemがあったのでメモ! 他にも個別のブラウザを分析出来るみたいです!! 検証環境 - Rails 5.2.2 - gem 'browser' : バージョン:2.5.3 実装方法 コントローラーでリクエスト情報からBrowser.newして判定するだ…

Railsアプリでwebpackerを使う場合はbin/webpack-dev-serverコマンド実行しておかないと生産性落ちるぞ!

概要 webpacker使ってると毎回Vue.jsを使っている画面に遷移するたびに [Webpacker] Compiling… というようなメッセージがコンソールに出て読み込みが遅いから何とかならんかな...って思っていました。 しかし!あるコマンドを実行することでホットリロード…

Railsアプリでmongoidを使った場合の特定フィールドに対するユニークバリデーションの実装方法

概要 RailsでMongoDB用のORMとして mongoid というgemがあります。 ここではそれを使った場合のモデルのバリデーションについてまとめてみます。 注意 RDBで言うカラムのことをMongoDBではフィールドと呼びます。 後述するフィールドは頭の中でカラムと変換…

JavaScriptで文字列の掛け算を実装したい場合の注意点

概要 Rubyでは文字列を数字で掛けると欲しい文字数のオブジェクトを簡単に作ることが出来ます。しかし、JavaScriptだとカジュアルに同じことが出来ないので、色々調べてみた結果をここにまとめてみます。 Rubyの例 '*' * 3 => '***' JavaScriptの例 '*'.repe…

Railsのログフィルター(filter_parameter_logging.rb)の活用法

filter_parameter_logging.rbって? config/initializers 配下にあるRailsがデフォルトで提供している本番ログにセキュアな情報(パスワード等)が流れないようにする仕組みです。(Rails4系からあるのかな?) 実際の活用方法について 業務で使っていると仕様変…

RSpecの実行オプションまとめ

経緯 RSpecにはコマンド実行時に付けることが出来る便利なオプションがあり、復習がてらいくつかをまとめようと思った次第です。 -f documentationオプション -f documentation をつけることでコンソールへの出力形式がテストファイルの context と it など…

RSpec : 時刻のテストではtravel_toしたら必ずtravel_backしてね

追記:2019.09.23 こちらの記事で記載があるようにRails 5.2系からtravel_backを明示的に書かなくてもよくなった模様... shinkufencer.hateblo.jp y-yagi.hatenablog.com 経緯:自分が出したプルリクだけ関係ないRSpecで落ちる ここ数日、自分が修正したプル…

よちよち.rb 第143回 〜 jnchito さんと!Ruby・Rails での『困った』を解消しよう会〜 に参加した

よちよち.rb with 伊藤淳一さんに参加 掲題のイベントに参加して来ました。 yochiyochirb.doorkeeper.jp 内容としては、事前に集められた質問を元に伊藤淳一さんが一問一答していくといった感じでした。話す内容によってオフレコのものもありましたので、こ…

ローカル環境でRailsアプリのサーバーを別プロセスで2つ起動する方法

概要 つい先日、仕事でとある機能の修正をした後の動作確認で、クロスドメイン(サブドメインと独自ドメイン)間でブラウザ上のローカルストレージに保持される値が共有されるかをテストしなければならない機会があり、その際にやったことの自分用メモです。 …

RSpecの実行結果をドキュメント形式で

RSpecの実行結果を分かり易く表示したい CI上でランダムに失敗するRSpecをローカルで調査する際はどのテストがどの順番で実行されてエラーになるのか調査する必要があります。そういった場合にRSpecの実行コマンドにオプションをつけることでコンソールから…

CircleCIでランダムに落ちるテストを調査する方法:seed番号を指定してRspecを動かす

CircleCIでよく分からないところでテストが落ちる ローカルでは落ちないテストがCIだと落ちる... そんな時、原因はパッと思いつく限りでもいくつかあるだろうと思います。 原因と思われるもの 実行順序に依存しているテストがある 時刻系の処理で書き方の不…

Railsのerb経由でVueコンポーネントに値を受け渡す方法

動作検証した各ライブラリバージョン Rails : 4系(5系でも問題なく動きそう) Vue.js : 2.5.13 注意 サンプルコードは実際のコードを抽象化したものであるため雑に抽象化されて分かりにくいかもしれません 想定されるアプリの構成 gem 'webpacker' を使用して…

痒いところに手が届くmongoidの検索条件まとめ

はじめに 本記事は、mongoidでこういう検索条件で検索をしたいのだけど、どうやったらいいのか?という 痒いところに手が届くように、その他のmongoidの記事では触れていない部分に触れていきます。 サンプルが最初は少ないですが、順次更新していく予定です…