Ruby

Railsで、wrap_parametersで追加されたキーに対し、Strong Parametersのrequireやpermitを使ってみた

Rails製のAPIに curl -X POST 'http://localhost:3000/wrap_parameter/outputs' -H "Content-Type: application/json" -d '{"name":"foo", "age": 20}' なリクエストを投げたところ、ログに Started POST "/wrap_parameter/outputs" for 127.0.0.1 at 2022-0…

Railsで、モデルとマイグレーションファイルのそれぞれにON DELETE CASCADEな設定をして挙動を確認してみた

DB上のテーブル間に外部キー制約があり、「親を消したら、親に関係する子も削除する」みたいな処理を行いたいとします。 この場合、テーブルの外部キー定義で ON DELETE を指定することで対応できます。 SQLite 4.3. ON DELETE and ON UPDATE Actions | SQLi…

Railsで、eager_loadのLEFT OUTER JOINにて、WHERE句とON句のそれぞれで絞り込みしてみた

Railsで eager_load を使う中で、 eager_load についてもうちょっと理解を深めたいと思いました。 eager_load についてはWeb上にいろいろな記事はあるものの、自分の理解を深めるためにためしたときのメモを残します。 今回は eager_load のLEFT JOINにて、W…

RubyMine 2021.3.3 にて、 debug gemを含むRails 6.1 アプリがデバッグできなかったため、回避策を実施してみた

自分の環境だけかもしれませんが、RubyMine 2021.3.3で debug gem を含む Rails 6.1 アプリがデバッグできなかったため、回避策を実施したときのメモを残します。 目次 環境 再現の流れ Railsとdebug gem の準備 Railsアプリの作成 通常起動で動作確認 デバ…

Railsで、関連付けの基本や関連付けにおけるNOT NULL制約まわりをさわってみた

Railsにてモデルの関連付けを行おうとしたとき、色々と機能があることに気づきました。 Active Record の関連付け - Railsガイド Active Record マイグレーション - Railsガイド そこで、まずはモデルの関連付けの基本およびNOT NULL制約まわりをさわってみ…

Rails + Devise + OmniAuthにて、Deviseで認証を、OmniAuthでOAuth2.0の認可コードグラントフローの認可だけを扱えるか試してみた

Rubyの OmniAuth gemの用途としてREADMEには OmniAuth is a library that standardizes multi-provider authentication for web applications. It was created to be powerful, flexible, and do as little as possible. Any developer can create strategie…

Rails + OpenAPI なAPIにて、レスポンスボディがない場合、committee の assert_response_schema_confirm を使うとエラーになる

Rails + OpenAPI で作られているAPIのテストコードを書く時、 interagent/committee: A collection of Rack middleware to support JSON Schema. willnet/committee-rails: rails and committee are good friends を使うことで、OpenAPIスキーマのテストもし…

Ruby 3.0.3 にアップデートしたところ、bootsnap の影響で Rails が起動しなくなったので対応した

先日、Rubyのセキュリティリリースが出ていました。 Ruby 3.0.3 Released そのため、Rubyのバージョンを 3.0.3 に上げたところ、Rails や RSpec が起動しなくなったため、対応した時のメモを残します。 環境 Ruby 3.0.3 Rails 6.1.4.1 bootsnap 1.9.1 エラー…

Ruby の WebMock では、クエリ文字列も考慮して stub_request する

外部サイトへのアクセスが発生する、 Railsアプリがあるとします。 このRailsアプリに対するテストコードでは、外部サイトへのアクセスが発生しないよう、 WebMock を使うのが便利です。 bblimke/webmock: Library for stubbing and setting expectations on…

React + Rails + Vite.js なSPAアプリをモノレポで作ってみた

RailsでWebpacker以外の方法で React のSPAアプリが作れないかを調べたところ、 vite_rails がありました。 Rails Integration | Vite Ruby webpackやRailsのWebpackerに詳しくないため、React と Rails と Vite.js を組み合わせてSPAが作れそうなのは魅力的…

doorkeeper製 OAuth 2.0 のAuthorization Serverにて、色々な状態のアクセストークンを使って Introspection エンドポイントの挙動を確認してみた

2021/08/26 00:42 追記 ご指摘いただいた内容に合わせ、記事を修正しました。 主な修正点は以下の通りです。 タイトルをOAuth2.0な文脈へ変更 環境に Resource Server を追加し、Resource Serverの中で Authorization Server の Introspection エンドポイン…

Railsとdoorkeeper-openid_connectやOmniAuth を使って、OpenID Connectの OpenID Provider と Relying Party を作ってみた

OAuth2やOpenID Connectの理解を深めようと思い、 OAuth徹底入門 セキュアな認可システムを適用するための原則と実践(Justin Richer Antonio Sanso 須田 智之 Authlete, Inc.)|翔泳社の本 Auth屋さんの書籍 【電子版】雰囲気でOAuth2.0を使っているエンジ…

Railsで、Action Mailerの callback・interceptor・observer の実行タイミングを調べてみた

RailsのAction Mailerには callback 3 Action Mailer Callbacks | Action Mailer Basics — Ruby on Rails Guides interceptor 7.1 Intercepting Emails | Action Mailer Basics — Ruby on Rails Guides observer 7.2 Observing Emails | Action Mailer Basic…

Active AdminのControllerでは、Strong Parameters のメソッド名は permitted_params だった

Rails の Controller で Strong Parametersを使う場合、 ***_params というプライベートメソッドを定義しています。 一方、Active Admin の Controller で Strong Parameters を使う時は、デフォルトだとどんな名前になるのかを調べた時のメモです。 目次 環…

Rails + Active Adminで、Active Admin Controllerのcreate/update/destroyをオーバーライドする

Railsでは、Active Adminを使うことで管理者画面を容易に作ることができます。 Active Admin | The administration framework for Ruby on Rails そんな中、Active AdminでModelの作成・更新・削除を行うと同時に、Modelとは関係ないAPIを呼ぶ処理を追加した…

Railsで、同一のbefore_actionを別オプションで複数定義した場合、最後の定義が有効になる

Railsで before_action などのフィルタでは、 only などのオプションを追加することで対象のActionを制限できます。 8 フィルタ | Action Controller の概要 - Railsガイド そんな中、同一の before_action を別オプションで複数定義してしまったことがあっ…

Rails + 名前空間付きのActionMailerを使う場合に、件名をi18nのロケールファイルで指定してみた

Railsガイドによると、Action Mailer の件名は mailメソッドに件名が渡されなかった場合、Action Mailerは既存の訳文の利用を試みます。「<mailer_scope>.<action_name>.subject」というパターンでキーが構築されます。 4.6 Action Mailerメールの件名を訳文に置き換える | Rails 国際化</action_name></mailer_scope>…

Railsで、DeviseのMailerにControllerから値を渡す方法を調べてみた

Deviseの recoverable confirmable lockable の各モジュールでは、各種確認のためにメールを送信します。 メール送信時に使われるのが Devise::Mailer にある reset_password_instructions などのメソッドです。 https://github.com/heartcombo/devise/blob/…

Railsにて、Controllerのactionにクエリストリング付でリダイレクトする

RailsでControllerのactionにリダイレクトする時は redirect_to action: :index のように書くものの、クエリストリング付でリダイレクトする時はどうすれば良いか調べた時のメモ。 環境 Rails 6.1.4 対応 redirect_to の引数を def move_with_field redirect…

Railsで、うっかりトランザクションをネストしたところロールバックされなくなったため、requires_newとjoinableを調べてみた

Railsで、うっかりトランザクションをネストしてロールバックされなくなったので、requires_newとjoinableを調べた時のメモを残します。 なお、調査時のソースコードが長くなってしまったことから、一部のみ記載しています。 もしよろしければ、Github上のソ…

Railsにて、コントローラのアクションが長くて見通しが悪くなったため、Formオブジェクトとフィルタを使うようにした

Railsを書いている中で、コントローラのアクションが長くなってしまい、コードの見通しが悪くなったことがありました。 そのような時はFormクラスとフィルタを使うのが良いと同僚に教わったため、リファクタリングした時のメモを残します。 目次 環境 仕様に…

Rails6.1 + Devise 3.8.0 で、Deviseのデフォルトの挙動を確認してみた

Deviseを使うと認証まわりの機能をRailsに組み込むのが容易です。 ただ、「そういえばDeviseにある各モジュールのデフォルトの挙動はどんな感じだろう」と思ったため、調べた時のメモを残します。 目次 環境 検証するためのRails + Deviseアプリを作成 アプ…

Devise 4.8.0 でメールテンプレートを変更したい場合、カスタムメーラーの template_path ではなく headers_for をオーバーライドする

Rails + Deviseにて、Devise標準のメール受信確認用メールテンプレートを差し替えたいことがありました。 そこで Devise の Wiki How To: Use custom mailer · heartcombo/devise Wiki に従い、 % bin/rails g devise:views users ... create app/views/user…

Rails 6.1 + Devise 4.8.0 で、ルーティングから一部のdeviseモジュールの URI Pattern を削除する

Rails + Deviseでは、ModelにDeviseのモジュールを組み込むと、自動的に routes へ URI Pattern が追加されます。 例えば、 Rails.application.routes.draw do root to: 'home#index' devise_for :users end な routes.rb の時、DeviseのModelが class User …

Rails6.1で、セッションをキャッシュとは別のmemcachedへ保存する

Rails6.1でセッションをキャッシュとは別のmemcachedへ保存しようとした時、色々調べたことをメモに残します。 目次 環境 デフォルトのセッションストレージ Railsアプリの作成 動作確認 キャッシュの保存先を変更するための準備 フラグメントキャッシュを使…

rake -T では表示されないRakeタスクについて

Rakefileの中に定義されているRakeタスクを確認しようと、 rake -T したところ表示されないRakeタスクがあったため、メモを残します。 環境 rake 13.0.2 原因 ヘルプに書いてありました。 rake -T では desc がないRakeタスクは表示されないとのことでした。…

Delayed Job を使って実行する処理を、RubyMineでデバッグをする

Rails + Delayed Job な環境で、Delayed Job を使って実行する処理がありました。 例えばこんな感じです。 # Delayed Job で実行 # call_heavy_api中で外部APIを呼んでいるが、その処理が重いとする Task.delay.call_heavy_api({ foo: 'bar' }) そんな中、De…

Macにrabbitをインストールし、プレゼンテーマを自作してみた

Macにプレゼンツールのrabbitをインストールし、プレゼンテーマを自作した時のメモを残します。 公式サイト:Rabbit - はじめに 目次 環境 rabbitの動作環境を構築 rbenvのインストール rbenvを使ったRubyのインストール Bundlerを使ってrabbitをインストー…

Albacore v2.xを使って、FluentMigratorを実行する

以前、RakeタスクからFluetnMigratorを実行しましたが、Albacore v2.xではfluentmigratorメソッドがなく、Wikiに書かれている内容では実行できませんでした。 そんな中、Albacore v2.xのGitHubを眺めていたところ、albacore/fluent_migrator.rbとそれに対応…

Herokuで .NET(Mono)とRubyのbuildpackを使って、Nancyを起動しつつRakeタスクを実行する

以前、Herokuにて.NETのbuildpackを使ってNancyをデプロイしてみました。 C# + NancyでJSONを返すWebアプリを作り、Heroku Buttonを使ってHerokuへデプロイしてみた - メモ的な思考的な そんな中、.NET(Mono)環境でもRakeタスクを使いたくなったため、いろい…