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