8章
Active Storage
ActiveRecord::Type::Boolean.new.cast(remove_image)
Boolean型にする。
FALSE_VALUES = [ false, 0, “0”, :“0”, “f”, :f, “F”, :F, “false”, :false, “FALSE”, :FALSE, “off”, :off, “OFF”, :OFF, ].to_set.freeze
ActiveRecord::Type::Boolean
Active Storageにはバリデーション用ヘルパーがないので、Active Storage ValidationsというGemを使う。
@event.image.attached?
と@event.image.blob&.persisted?
の違い
ダイレクトアップロードでは不完全なバリデーションしか掛けられないので、それを許容するか非同期でバリデーションを行う。
Searchkick
検索対象のレコード数が増える・文章検索ではインデックスが貼れない→Elasticsearchなどの全文検索エンジンを使用する。
ElasticsearchはRailsやDBとは別のプロセスで動き、インデックスやドキュメントのデータを内部で保持する。
Searchkick
DBとElasticsearchを連携させる処理を自動で行ってくれるGemの一つ。
本書ではフォームオブジェクトを用いて設定している。が、
form_with
はデフォルトでajax通信を行う- TurbolinksはformによりajaxのGETリクエストに対応していない
\(^o^)/
ということで、jsを書く必要がある。
|
|
application.jsでrequireする。
エラーハンドリング
rescue_from
エラーを拾ってアクションに流す。下から判定される。
ルーティングエラーはRack Middlewareで発生するので、ルーティングでmatch "*path" => "application#error404", via: :all
を設定して拾う。
前述のようにrescue_from
はRack Middlewareのエラーは拾えないので、エラーハンドリングを行うためのRack Middlewareを利用する。
Railsがデフォルトで提供しているRack Middlewareの一つであるActionDispatch::ShowExceptionsは例外をキャッチし、Rails.application.config.exceptions_app
として設定されたRackアプリケーションで処理される。デフォルトではActionController::PublicException
のインスタンスが設定される。
自作例外の発生時にpublic/500.html
以外を表示する場合は、以下のように設定する。
|
|
これで、YourNewException
発生時にはpublic/404.html
が表示される(本番環境のみ)。
エラー通知
exception_notificationは、Slackに大量にエラーが届いたり、誰が対応したか・特定のエラーのみ無視するといった細かい設定ができない。
→実務ではSentryやRollbarなどの外部サービスでエラーが管理するのを推奨。