Rails – サービス層でURL.encodeがNoMethodErrorになる

背景 Rails で日本語が含まれるURLを扱う場合、日本語部分をエンコードする必要があります。 通常、URI.encode (url) で事足りるはずですが、サービス層で利用した時に次のエラーが出ました。 class ServiceObject def execute url = ‘https://example.com/日本語’ URI.encode(url) # ここでエラー! # 以下、処理が続く end end NoMetho

Rails – RansackでOR条件グループを適用させる

やりたいこと Ransackの検索条件の一部にOR条件グループを作りたい。 例えば、以下のようなテーブル構成の場合、 テーブル名 カラム名 a_tables price fee b_tables cost a_table_id Ransack の検索条件の一部として、次のようなOR条件を適用させたい: a_tables の 「price」 が入力されており、かつ a_tables の 「fee」 または b_tables の「cost」

Rails – 特定の条件でモデルのコールバックをスキップ

スキップさせたいコールバックアクション before_save や after_save など、モデルのコールバックアクションを 「あるアクションで保存する時は処理をスキップさせたい!」 と思うことがあります。 次の do_something を特定の文脈でのみ走らせたい!というような時です。 # Model class User before_save :do_something def do_something # 特定の文脈でのみ

Rails – form_withでPOSTしたはずの”params”がnilになる?

背景:消えた “params”? 何の変哲もないform_withで書かれたフォーム。 # slim = form_with url: action_path do |f| = hidden_field_tag :name, ‘test’ = f.submit このフォームをサブミット(POST)して、コントローラで値を確認すると、 なぜか params => nil となります。 def action bing

本番ユーザ登録で401エラーはdeviseのsecret_keyを疑え!

環境 Rails 5.1.1 gem devise 本番環境でユーザ登録できない! 新しく作成したアプリをデプロイした後、本番環境で動作確認するとユーザ登録でエラーが発生。 ログを見てみると以下のとおり。 Started POST “/users” for 153.221.66.198 at 2018-08-24 06:15:01 +0000 Processing by Users::RegistrationsController#cr

Rails専門エディタRubyMineを購入した理由

Railsの開発でよく使われているエディタといえば「RubyMine」です。 ライセンス料が年間1万円ぐらいするのですが、とても人気のエディタです。 自分も専ら Rails で開発しているので、先日 Visual Studio Code から RubyMine に乗り換えました。 ここでは1ヶ月体験版を使ったあと、なぜ購入することにしたかを説明します。 購入した主な理由は2つ RubyMine に乗り換えた理由は主に以下の2つです。 コ

Rails – Waiting (TTFB) が遅いときの探り方

(追記 2018-07-27) 以下の対応でも、やっぱり時間が経つとだんだん重くなってきます。相変わらずサーバ再起動すると直ります。 Waiting (TTFB) は基本的にサーバ側の問題だと思うのでまた掘り下げてみます。 Railsアプリがなんか重い… ページ描画はそれなりの時間で完了するものの、ブラウザツールバー下の読み込みゲージが中々満タンにならないという挙動が発生していた。 Chrome の検証から Network

Rails 5.2の本番デプロイ時に secrets.yml でハマった

関連記事:CentOSでRailsアプリをデプロイする手順 secrets.yml.enc が作れない! 新しく作ったアプリをデプロイしていると secret_key_base の設定でつまずいた。 Rails5.1から導入された Encrypted secrets を使おうとコマンドを叩くが以下のエラーメッセージがでる。 $ rails secrets:setup Encrypted secrets is deprecated in

Rails – gem “font-awesome-sass” がインストールできない

環境 Ruby on Rails 5.2.0 CentOS 6.7 font-awesome-sass のインストールでエラー RailsアプリでFontawesomeを利用したいと思い、 gem “font-awesome-sass” で実装を行っていました。 開発環境では問題なく動きます。 そこで、デプロイしようと思い、本番環境で bundle install すると以下のエラーが発生。 $ bundle i

Rails – Modelのユニークバリデーションを複数項目で判定

やりたいこと Modelのユニークバリデーションを複数項目( team_id と parent_id )で判定したい。 parent_id が nil の場合は重複判定しない。 削除フラグ is_deleted が立っているものは重複判定に含めない。 実装例 Model class Model validates :parent_id, uniqueness: { scope: :team_id, allow_nil: true, co