カレーの恩返し

おいしいのでオススメ。

Rails

Rails7.1からcolumn,enum名に使えない名前が増える可能性が高いので注意

3行まとめ Rails 7.1 から dup, freeze, hash, object_id, class, clone, frozen は column 名や enum の種類として使えなくなる可能性が高い 該当 column を持つ Model の initialize で ActiveRecord::DangerousAttributeError が発生する 各位そういった…

Rails の has many through 経由でモデルを削除すると destroy callback が呼び出されない

has many through の挙動についてずっと勘違いしていたところがあったので忘れないように書き留めておきます。 3行まとめ has many through のデフォルトの挙動では削除時に delete_all を実行したのと同じ挙動になり、callback が発火しない has many throu…

marginalia(ActiveRecord::QueryLogs) を使うと ActiveRecord::Relation#explain が空文字を返す問題

困っている人向けまとめ marginalia(ActiveRecord::QueryLogs) を prepend_comment = true の設定で使うと ActiveRecord::Relation#explain が空文字を返す問題がある marginalia に issue が立っていて修正は既に rails/rails に取り込まれている Merge pul…

ActiveModel::Dirty を使うときに気をつけること

最近ハマってしまったのでメモとして残しておく。 TL;DR 自身のmodel と association を同時に save する場合は dirty attribute が上書きされる可能性があるので注意する必要がある。 本編 雑なサンプルを提示する。 User : ユーザー作成時に新規ユーザー向…

ModelとConcernに記述したcallbackの実行順

結論 Concern に記述された callback が先に実行される。 既存の callback を Model もしくは Concern に移すときは気をつける必要がある。 以下確認コード class Hoge < ApplicationRecord include HogeConcern before_validation -> { puts "before_valida…

RailsのCookieStoreをnodeで復号する

背景 既に動いているRailsアプリケーションとfrontendの間にBFF用のnodeサーバを立てて、認証情報(currentUserIdの取得)はBFFで吸収させたい。 ※ Session管理にCookie Storeを使っているRailsアプリケーションを想定しています。 書いた RubyのMarshal.load…

RailsのService層とうまく付き合うにはどうすればいいのか調べてみた

「RailsのService層ってどう使っていくのがいいんだろうね?」って聞かれたときにすぐ答えられなかったのでまとめておきたいと思います。 ※ Fat Modelの解決策としてTrailblazerが最近よく話題に上がりますが、私がまだ使ったことがないので触れない方向で行…

Podcast配信機能をRailsに組み込んでみた

これは呉高専エンジニア勉強会 Advent Calendar 2017の9日目の記事です。 呉高専OB1年目の@euglena1215です。 今年の12月はすごい勢いで記事書いてます。 とあるラジオのサイトでPodcastを配信したくなったのでどう実現するべきなのかを考えた過程を書いてい…

ActiveRecordっぽいO/Rマッパーを作ってみた

github.com ActiveRecordっぽいものを一度実装してみて本物と実装方法の違いを眺めるのが勉強になりそうだと思ったのでとりあえず作ってみました。 ついでにSQLite3のC言語APIをRubyで実行できるようにする拡張ライブラリsqlite3_coreも作りました。 ※記事中…

refineは一体どこで真価を発揮するのか

結論 ナンセンスな標準メソッドの実装にパッチを当てたくなったときにrefineは真価を発揮する。 以下、結論に至るまでに道のりです。 refineとは Rubyにはrefineというどんなクラスのメソッドでもローカルで再定義できる機能がある。 [1] pry(main)> module …

RDFをSPARQLを使ってRailsでDBっぽく扱ってみた

RDFをSPARQLで操作するハッカソンがあり、Activerecordを使ってのDB操作と同じようにRDFを扱いたかったのでactiverecordのメソッドっぽくラップしてみた。 まず以下をGemfileに追記する。 # Gemfile ... gem 'active_attr' gem 'sparql' active_attr はテー…

Rails+carrierwave+heroku+AWS S3で画像アップロードさせるときにハマったこと

# Gemfile gem 'carrierwave' gem 'fog-aws' gem 'rmagick', require: 'RMagick' # config/initializers/carrierwave.rb if Rails.env.production? CarrierWave.configure do |config| config.storage = :fog config.fog_provider = 'fog/aws' config.fog_cr…

多対多の相手レコード数の最小を指定するバリデーション

こんなクラス構造 class Hoge < ApplicationRecord has_many :hoge_foos has_many :foos, through: :hoge_foos accepts_nested_attributes_for :hoge_foos end class Foo < ApplicationRecord has_many :hoge_foos has_many :hoges, through: :hoge_foos end…

`rails new my_app`を解読してみた

Railsアプリを作成するときに毎回使う rails new my_appで何が起きているか知りたかったのでソースを読み解いてみました。 初学者なので解説が間違っている, 解説の粒度がバラバラで読みにくい可能性があります。 何かありましたらコメントください。 コード…

Railsでセキュリティのことを考えずに作ったwebアプリは脆弱性があるのか調べてみた(脆弱性検証編)

この続きです。 euglena1215.hatenablog.jp 検証方法が全く網羅的ではないということを踏まえた上でお読みください。 検証 XSS(クロスサイトスクリプティング) 方法 投稿フォームに以下のリンクに載っているXSSの例を片っ端から入力してみた。 XSS Filter Ev…

Railsでセキュリティのことを考えずに作ったwebアプリは脆弱性があるのか調べてみた(webアプリ作成編)

こんにちは。僕はこのたびセキュリティキャンプ九州2016に行ってきました。 一言感想を言わせていただくと大変面白かったです。 ただ一つ不安になったことがあります。それはwebアプリの脆弱性です。 キャンプ中にwebアプリの脆弱性を見つけてみようという講…

rake db:migrateとrake db:schema:loadの違い

rake db:migrate と rake db:schema:load はどちらもテーブルを作成、変更、削除するときに使うコマンドだけど違いがよく分かっていなかったのでメモメモ。 rake db:migrate migrateファイル群を元にschema.rbを作成 schema.rbを元にSQLクエリを発行する rak…

実行中のプロセスを表示・終了させる

rails s でサーバーを立ち上げている最中にPCがフリーズして再起動させるとデーモン化してしまい、終了させることができない。。。ということが多々あるのでメモ。 実行中のプロセスを表示 ps : 実行中のプロセスを表示 オプション 機能 a 自分以外のユーザ…