valid,invalid

関心を持てる事柄について

Ruby on Rails

Kaigi on Railsに登壇します

2021-10-22 (土), 23 (日)に行われるKaigi on Railsに登壇します。 2日目の23日 13:50~14:20 の30分枠で "Safe Retry with Idempotency-Key Header" という題にて発表します。あと3週間ですね。 イベント参加はこちらから↓ kaigionrails.doorkeeper.jp 私の…

NameError uninitialized constant ActiveStorage::Analyzer::ImageAnalyzer::MiniMagick

ActiveStorageで画像アップロードを行ったあとに非同期に実行される画像の解析処理で NameError ActiveStorage::AnalyzeJob uninitialized constant ActiveStorage::Analyzer::ImageAnalyzer::MiniMagick エラーが出た。 処理を行っているのはActiveStorage:…

ActiveRecordのgroupクエリの結果の件数取得、count vs size vs length添え

ActiveRecordでgroupクエリの結果の件数をスマートに取得したいだけ。 SELECT COUNT(*) FROM ( SELECT "users"."id" FROM "users" INNER JOIN "posts" ON "posts"."user_id" = "users"."id" GROUP BY "users"."id" HAVING (count(1) > 5) ) 前提: count vs s…

壊れたルーティングを検出する route_mechanic gem と、その内部実装の話

壊れたルーティングの検出、routing specを自動化するroute_mechanic gem を作って公開しました。この gem の紹介と内部実装の話を書きます。 rubygems.org 背景 Rails 開発者のうちの N% は、Rails application のルーティングを検証するために以下のような…

ActiveRecord Association Extensionとwith_optionsを併用するとrubocop-railsのRails/HasManyOrHasOneDependent警告が出るので修正してみた

ActiveRecord Association extensionsでメソッドを追加する - valid,invalid で書いたActiveRecord Association Extensionだが、with_optionsと併用するとrubocop-railsのRails/HasManyOrHasOneDependent copに警告されることがわかった。 with_options depe…

ActiveRecord Association extensionsでメソッドを追加する

has_many*1にblockを渡すとassociationにメソッドを追加することができる。 class User < ActiveRecord::Base has_many :posts do def stats group(:status).count # このcontextで`self`は`ActiveRecord::Associations::CollectionProxy` # `proxy_associat…

Rails ActiveRecord 1ファイルで 新機能試す デバグ バグレポート 便利

(追記: 2021-03-21) 本家が提供しているテンプレートがあった…!! rails/active_record_main.rb at main · rails/rails · GitHub いつもググったり思い出したりしながら書いているのでメモしておく。 新機能触ったりデバグしたりバグレポートしたりするときに…

既存のRESTish APIエンドポイントにOpenAPI定義を足していく試み

昨年、とあるアプリケーションのフロントエンドリニューアルプロジェクト*1の際に取り組んだ課題について書きます。Ruby, Railsの話が出てきますがRESTish APIの定義をどのように管理するか、API定義が存在しない既存アプリケーションにどのようにドキュメン…

gem install することなく Slim, Haml, Pug を HTML に変換する

Rails の view を React で書き直したときに使った脱 Slim のやり方 各種 gem を install して手元でコマンド叩いてもできるけど面倒くさい場合に使える 結論 converter - How can I convert html.slim files to html or html.erb? - Stack Overflow この回…

「Quipperが実践する、定量データに基づく意思決定と開発」という話を Rails Developer Meetup 2018 Day 3 extreme でしてきました

してきました。 techplay.jp スライド データ周りや意思決定の話は専門ではないのであまり主語を大きくして叩かれないようにわりと渋めのタイトルにしました。ちょっと局所的すぎたかもしれません。 トーク 20分のトークは初めてだったので勝手がわからず86…

最近の構成 (backend: Rails + PostgreSQL, frontend: React + TypeScript) を docker-compose で立ち上げる boilerplate 作った

TL;DR 現プロジェクトと近似した構成で素振り出来るよう Rails + PostgreSQL による backend と React + TypeScript による frontend を docker-compose で立ち上げる boilerplate 作ったhttps://t.co/iCqMc2TWrD— 広島の粗大ゴミ (@ohbarye) 2018年7月7日 g…

Rails で Slack のような Magic Link による認証を実装する

passwordless という gem が最近リリースされたようなので少し触ってみた。 名前の通り認証時にパスワードを必要とせず、いわゆる Magic Link によるログイン機構を Rails アプリケーションで実現できる。 Magic Link とは Slack や Medium が実装しているこ…

webpackerを導入したRailsアプリケーションをDeisにデプロイする

webpackerを導入したRailsアプリケーションが手元ではちゃんと動いておりテストもパスした、あとはデプロイだけだ〜という段階で失敗した。 解決策 新しめの Ruby アプリケーション用の buildpack が使われるよう、BUILDPACK_URL を正しく指定する。具体的に…

Rails の form 内で disabled された submit ボタンを再度 enable する

form を submit する時に disabled されるボタンを re-enable するには $.rails.enableFormElements($form) を使う。 二重サブミット防止 まず、data 属性に disable_with を設定するとクリック時にボタンが disabled になり、二重 submit 防止になる。ラベ…

Controller spec で render_to_string の結果が empty string になる

View でちょっと頑張る必要があり Controller から render_to_string で文字列を得てから JSON に突っ込むようなエンドポイントがあるとする。 # controller/books_controller.rb class BooksController # GET /book/:id def show @book = Books.find! param…

Rails の cookie session をデコードする

staging のアプリケーションでのみ起こるバグを調査している折、どうやらセッションにちゃんと値をセットできていないぽいと気付いた。 そのアプリは cookie session を採用していたので簡単に暗号化された値は手に入ったが、これはどうやったらデコードでき…

更新時に updated_at, created_at を更新しない

record_timestamps に false をセットすることで、更新時の updated_at, created_at へのオートフィルをスキップすることができる。 # Active Record レベル ActiveRecord::Base.record_timestamps = false # モデルのみ User.record_timestamps = false # …

9/16学んだこと / Rais tutorial chapter 1,2 / vim / 読んだもの

引き続き、胃腸炎。熱は下がった。 Ruby on Rails Railsを包括的に学ぼうとRailsチュートリアルを始めてみた。まずは1〜2章をやってみた。 このあたりはまだ付いていける内容だった。 やってみてわかったけどRailsの知見を盛り込むだけでなく周辺技術(当然R…

8/15学んだこと / Backbone.js × Rails

Backbone.js Backbone.jsのサンプルTodoアプリを引き続き見た後、RailsアプリでBackbone.jsを使う - Qiita を参考にRailsとBackboneでTodoアプリを動かしてみた。 記事通りに進めようとしたが、情報が古くてうまくいかなかった。2011年なので仕方ない…Backbo…

8/11学んだこと / Rails ( Haml / Slim / Hamlit ) / 読んだもの

Ruby on Rails テンプレートエンジンについて少し学んだ。 Haml codecademyのチュートリアルでRails標準のERB書いてて「Ruby界隈の人、本当にこんなテンプレートエンジン使うのかな?」って思ってた。 そこでHaml。 Hamlhaml.info Haml (HTML abstraction ma…

8/10学んだこと / Ruby開発環境 ( vim / Vagrant ) / CoffeeScript / jbuilder / 英語

Ruby 今更ながら、Rubyの開発環境について何も知らなかったので色々調べていた。vimが主流ぽい。 vim JavaはEclipe、PythonはAtomで書いてきたのでvim力が低い…。vim力上げていきたい。 $ brew unlink vim $ brew install vim --with-lua $ curl https://raw…

8/7学んだこと / Ruby on Rails@codecademy

Ruby on Rails codecademyのRuby on Rails講座を100%完了したけど、これで何か作れるかというと相当厳しいと思うので何か作ってみる。

8/4学んだこと / Ruby on Rails@codecademy

Ruby on Rails codecademyのRail講座始めて65%ぐらいまで進めた。 基本的なコマンドから学んでる。 rails new bundle install rails generate model Message a model file in app/models/message.rb. The model represents a table in the database. a migra…