Just do IT

思うは招く

Ruby on Rails

Ruby や Rails で桁数を3行ごとにカンマで区切る

Ruby の場合 素の Ruby の場合、該当するメソッドはないため自作する。 数値をいったん文字列にして、正規表現を使ってカンマを加える。 数値.to_s.gsub(/(\d)(?=\d{3}+$)/, '\\1,') 使用例 irb(main)> 500000000.to_s.gsub(/(\d)(?=\d{3}+$)/, '\\1,') => "…

FactoryBot The Right Wayの感想 #kaigionrails2020

Kaigi on Rails 2020での学びや、感想をつらつらと書いていく。 今回は、メドピア(MedPeer)のtoshimaruさんによる、FactoryBotの正しい使い方について。 動画はこちら。 www.youtube.com なぜFixtureが重要なのか? テストの前提が間違えばその後のテストも…

Rails の日付入力フォームをカレンダー方式で入力したい

date_selectだと選びづらいので、date_fieldを使う。 .field = f.label :birthday = f.date_field :birthday

GitHubからクローンしたリポジトリを別リポジトリにプッシュしたい

手順 サンプルとして以下のリポジトリをクローンする。 https://github.com/kotakanazawa/rails-starter-kit クローンするとき、ディレクトリに新しい名前をつける。 git@github.com:kotakanazawa/rails-starter-kit.git 新しいディレクトリ名 GitHub上にリ…

devise gem のメール認証テストで Missing host to link to! Please provide the :host parameter エラー

問題 Devise のメール認証のシステムスペックを書いていたときに以下のエラーが出た。 ActionView::Template::Error: Missing host to link to! Please provide the :host parameter, set default_url_options[:host], or set :only_path to true 解決 confi…

devise でメール認証を実装したい【Rails】

やりたいこと 前提 手順 メール認証を有効にする もし途中からメール認証を実装したいなら deviseオプションを追加 メール設定 登録 注意 参考 やりたいこと devise gemを使って、「登録 → 確認のメールがくる → メール内のリンクをクリック → 認証OK」の流…

Rails6 で Webpacker::Manifest::MissingEntryError がでた

状況 app/javascript/packs下に新しいJavaScriptファイルを作成したが、読み込まれずエラーがでた。 Webpacker::Manifest::MissingEntryError webpackの開発サーバーも立てていた。 ./bin/webpack-dev-server 解決 Railsとwebpackのサーバーを再起動したらな…

Heroku の scheduler で Rails タスクを定期実行したい

やりたいこと Herokuのスケジューラーを使って、Rails(rake)タスクを定期実行したい。 前提 Herokuにアプリをデプロイ済み タスクを用意済み ローカルで動くことを確認済み 手順 今回は、以下のように「ネームスペース:タスク名」という構成のタスクを用意…

devise のログインURLをカスタム、変更したいときに参考になりそうな記事

自分用メモ。 DeviseのURLを変更する|KezzyTak|note Rails: deviseのURLをカスタムしたい - Qiita 感謝🙏

Rails の /bin/setup にある db:prepare はなにをするのか

rails newをするとデフォルトで./bin/setupスクリプトが生成される。 Rails6 では、そのなかにbin/rails db:prepareコマンドがある。 bin/rails db:prepare これは何をしてくれるのか。 DBが存在しない場合 bin/rails db:prepareがすること DBをつくる schem…

Rinku gem で リンクに rel="noopener noreferrer"属性を付与したい

URLやemailの文字列をリンクにしてくれる便利な Rinku gem。 vmg/rinku: Autolinking. Ruby. Yes, that's pretty much it. target _blank属性を付与できるのは公式ドキュメントからわかっていたが、rel="noopener noreferrer"属性もセキュリティのために付与…

Heroku と GitHub を連携。masterにマージされたら自動デプロイとマイグレーションを実行する

GitHubと連携し自動デプロイ Herokuで該当アプリの管理ページへ Deployタブへ Deployment methodでGitHubを選択 GitHub認証をする App connected to Githubで該当するGitHubリポジトリを探す Enable Automatic Deploy をクリック。ブランチはmasterを選択し…

Rails エラーページを自動生成する hanmoto gem

hanmoto の設定 ソニックガーデンの方が作成されたgem。同社で1年以上にわたって運用実績があるとのこと。 参考 Railsでpublic以下の静的ページ(404.htmlといったエラーページ等)をデプロイ時に生成するgemを作った - Qiita aki77/hanmoto: Public pages m…

Rails アプリへのアクセスを https にする

デフォルトでconfig.force_ssl = trueがコメントアウトされている。これをコメントインして有効にする。 config/environments/production.rb # Force all access to the app over SSL, use Strict-Transport-Security, and use secure cookies. config.force…

Rails で sprockets ではなく webpacker で scss を管理したい

手順 app/assets/stylesheets/をapp/javascript/配下に移動する。 $ mv app/assets/stylesheets/ app/javascript/ app/javascript/stylesheetsになっていればOK。 とりあえず今回は app/javascript/stylesheets/application.scss にそのままスタイルを書いて…

Rails で link_to に target blank 属性をつけて別タブで開くようにする方法

リンクにtarget: "_blank"を付与する。 #slimの場合 = link_to "Kota Kanazawa", "https://twitter.com/KanazawaKoh", target: "_blank" これで別タブで開かれる。

Rails で URL や email のバリデーションを実装したい

#url validates :url, format: /\A#{URI::regexp(%w(http https))}\z/ #email validates :email, format: { with: /\A[\w+\-.]+@[a-z\d\-.]+\.[a-z]+\z/i } email は 、devise やその他の認証系 gem を使っていたらすでにバリデーションが実装されている場合…

Devise でログインをスキップする方法

スキップさせたいコントローラーで以下を記述。 skip_before_action :authenticate_user!

Rails で rake タスクを作成・実行する

Railsでrakeタスクを作り、実行する手順 まず、適当なRailsアプリを作る。そしてコマンドラインで以下を実行する。 #適当なタスクを生成する $ rails g task task_sample 生成されたファイルを見るとネームスペースができており、この中にタスクを実装する。…

webmock で一度に複数回のAPIリクエストをするフリをしたい

やりたいこと webmock を使っていて、一度の処理で複数回のAPI通信をするフリをしたい リクエストURIのパラメーターがコードの中で変わるが、返ってくる複数のAPIレスポンスはまとめて処理したい 方法 この方法が最適なのかはわからないが、スタブ登録したも…

Google::Apis::ClientError: forbidden: The provided API key has an IP address restriction 自然解決?

問題 ウェブフレームワークに Rails を採用し、Google Search JSON API を使って開発していたとき。 コード側はなにも変えておらず、突然以下のようなエラーが出た。 Failures: 1) Google #rankings_ary Failure/Error: @search_results = searcher.list_cse…

webmock でAPIキーをダミーにして外部API通信するフリをしたい(Rails)

やりたいこと webmock でAPIキーをダミーにして外部API通信するフリをしたい Custom Search JSON API を使った箇所をRailsでテストをしたい 手順 Custom Search JSON API | Programmable Search Engine を使って開発をしていたときのこと。 Google公式が用意…

Capybara でリンクをクリックしたい

参考:使えるRSpec入門・その4「どんなブラウザ操作も自由自在!逆引きCapybara大辞典」 - Qiita click_link はa要素を指定する 見た目がボタンでもa要素ならリンク ボタンやリンクを考慮したくないなら、 click_on click_link "編集" click_on "編集"

Rails でテーブルにインデックスを追加したい

たとえば、Bookモデルの created_at にインデックスを貼りたい場合。 $ bin/rails g migration add_index_to_books ※ファイル名は適当 マイグレーションファイル。 class AddIndexToBooks < ActiveRecord::Migration[6.0] def change add_index :books, :cre…

Rails form_with にモデルオブジェクトを複数渡すときの書き方

ネストしたルートの場合、form_with には複数のモデルオブジェクトを渡すことがある。 = form_with model: [@article, @log], local: true do |f| = form_with(model: [@article, @log], local: true) do |f| ワッショイ💪

Rails 6 webpacker で JavaScript を扱う

最初に、yarn でライブラリをインストールする。 たとえば jquery を入れたい場合。 yarn add jquery config/webpack/environment.js の設定で、jquery の$マークを使えるようにする。 const { environment } = require('@rails/webpacker') const webpack =…

Rails ネストされたルートに対する form_with の書き方

やりたいこと 前提 結論 環境 前準備 ログを表示する ログ作成 ログを編集する ログを削除する ルーティングを整理 削除 フォームをパーシャル化 リポジトリ 感想 関連 やりたいこと 以下のように、ルートが親子関係を持つ場合のフォームの作り方を再現する…

rails db:rollback → マイグレーションファイル修正 → マイグレート再実行の流れ

ロールバック怖い。でもやらなければ・・・ ロールバックの手順をメモした。 背景 logsテーブルの id を uuid に変更したい でもすでに logs テーブルは作っちゃった 幸い、ひとつロールバックすればまだ戻せる DB は postgresql を使用 今の DB バージョン…

Rails + PostgreSQL で id を uuid に変更したい

モデル作成時に設定する手順 $ rails new uuid-test -d postgresql $ cd uuid-test データベース作成。 $ rails db:create モデル作成。 $ rails g model User name:string マイグレーションファイルを修正。 class CreateUsers < ActiveRecord::Migration[6…

rails new データベース PostgreSQL 指定

rails new <アプリ名> -d postgresql rails new後にDBを変えたい場合 Rails 6 で DB を SQLite3 から PostgreSQL に変更するのはコマンド一発 - Just do IT