(Pundit) index 系で authorize 相当を Scope でやる

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

Related Scraps:

Pundit

View にて pundit の policy を利用する例: Helper にて Pundit を手動で呼び出している。

ActiveRecord のデフォルト値

ActiveRecord は、 DB のデフォルトを読み込んで、それをモデルのデフォルト値として採用する。

aws-sdk-rails

Rails を aws 上で動かす際に欲しくなる機能もろもろを提供うる AWS のオフィシャル gem。

Devise

わかりやすくまとめた記事:

form_with

Rails v5.1 以上では、 form 系はこれを使え、という方針。 form_tagform_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 は、ネストすると、親は子のスコープを含まないらしい。(排他)