Scope
中の resolve
メソッドの中で Pundit::NotAuthorizedError
を raise
することにより、 Scope の記述だけで認可メソッドの代替を行ってしまうハックがある。
class MyModelPolicy < ApplicationPolicy
class Scope < Scope
def resolve
if user.admin?
scope.all
else
raise Pundit::NotAuthorizedError, 'not allowed to view this action'
end
end
end
end
src: https://stackoverflow.com/a/50966586/3090068
tags: #Pundit
Pundit
View にて pundit の policy を利用する例: Helper にて Pundit を手動で呼び出している。
ActiveRecord のデフォルト値
ActiveRecord は、 DB のデフォルトを読み込んで、それをモデルのデフォルト値として採用する。
aws-sdk-rails
Rails を aws 上で動かす際に欲しくなる機能もろもろを提供うる AWS のオフィシャル gem。
Devise
わかりやすくまとめた記事:
form_with
Rails v5.1 以上では、 form 系はこれを使え、という方針。
form_tag
と form_for
の代替。
Rails API で session / cookie
Laravel とかだと、 api で session を扱うプラクティスが割とある(気がする)。 Rails も設定すれば、普通にできる(はず)。
Rails でカラム削除
`ignore_columns` を指定してリリースし、その状態でカラム削除して、 ignore_columns を消して再度リリースする。
(Rails) flash
「次回のリクエスト」にて利用可能な、オブジェクトハッシュを提供する。 その実態は、 session に store している。
(Rails) partial ではインスタンス変数よりもローカル変数
partial においてインスタンス変数は引き続き利用可能だが、それはコントローラと密結合してしまうため、ローカル変数を利用する方が良い。
Rails の rake の動作ログを標準出力する
task :foo do
Rails.logger = Logger.new($stdout)
Rails.logger.level = Logger::DEBUG
end
Rails session
リクエストを跨いで保存される hash 的オブジェクト、に Rails 側からは見える。 明示的に副作用的な操作をしないかぎり、 hash は変更されれない。
Stimulus におけるスコープ
同名 controller は、ネストすると、親は子のスコープを含まないらしい。(排他)