Class: Rhino::RhinoModel

Inherits:
ActiveRecord::Base
  • Object
show all
Includes:
HasAutoScope, HasRhino, HasValidation, HidableColumns
Defined in:
lib/rhino/models/rhino_model.rb

Overview

RhinoModel -- Pre-composed base class for Rhino-powered ActiveRecord models.

Extends ApplicationRecord and includes the most commonly needed concerns for Rhino's automatic REST API generation. Subclass this instead of ApplicationRecord to get query building, validation, column hiding, and auto-scopes out of the box.

Quick Start

class Post < Rhino::RhinoModel
rhino_filters :status, :user_id
rhino_sorts :created_at, :title
rhino_default_sort '-created_at'
rhino_includes :user, :comments
rhino_search :title, :content

# Standard Rails validations for type/format (NOT presence — use allow_nil: true)
validates :title, length: { maximum: 255 }, allow_nil: true
validates :status, inclusion: { in: %w[draft published] }, allow_nil: true

# Field permissions are controlled by the policy (PostPolicy).
# See: permitted_attributes_for_create / permitted_attributes_for_update

belongs_to :user
has_many :comments
end

Included Concerns

Concern           | Purpose
------------------|-----------------------------------------------------------
HasRhino         | Query builder DSL (filters, sorts, includes, etc.)
HasValidation     | Format validation for request data
HidableColumns    | Dynamic column hiding from API responses
HasAutoScope      | Auto-discovery of ModelScopes::{Model}Scope classes

Optional Concerns (add manually when needed)

These concerns are NOT included in RhinoModel because they require additional database columns, gems, or relationships. Include them in your model subclass as needed:

Concern                     | Purpose
----------------------------|---------------------------------------------------
Rhino::HasAuditTrail       | Automatic change logging to +audit_logs+ table
Rhino::HasUuid             | Auto-generated UUID on creation
Rhino::BelongsToOrganization | Multi-tenant organization scoping
Rhino::HasPermissions      | Permission checking (User model only)
Discard::Model              | Soft deletes via the Discard gem

class Invoice < Rhino::RhinoModel
include Rhino::HasAuditTrail
include Rhino::BelongsToOrganization
include Discard::Model

rhino_filters :status, :client_id
rhino_sorts :created_at, :amount

validates :amount, numericality: { greater_than_or_equal_to: 0 }, allow_nil: true
validates :client_id, numericality: { only_integer: true }, allow_nil: true

end

Direct Known Subclasses

RhinoModel

Constant Summary

Constants included from HidableColumns

HidableColumns::BASE_HIDDEN_COLUMNS

Method Summary

Methods included from HidableColumns

#as_rhino_json, #hidden_columns_for, #rhino_computed_attributes

Methods included from HasValidation

#validate_for_action