Edited at

「Base」クラスをviewから使う

Ruby 2.5.3

Rails 5.2.1

ちょっと面白かったのでメモ。

「Base」という名前のmodelがあり、そこにscopeを定義してviewから直接呼び出したい場合、

「Base」classをviewから呼ぶと、下記エラーが発生する。

class Base < ApplicationRecord

scope :get_awesome_list, -> { joins(:fugas).order(:bar).limit(10) }

<%= Base.get_awesome_list %>

# => undefined method `get_awesome_list' for ActionView::Base:Class

どうやらBaseのことをActionView::Baseクラスと勘違いしているようなので、

superClassを指定してあげるとうまくいく。

<%= ApplicationRecord::Base.get_awesome_list %>

# => awesome_listが返ってくる!

まとめ

予約語をClass名に使うのはやめよう。