Class: Rhino::RhinoModel
- Inherits:
-
ActiveRecord::Base
- Object
- ActiveRecord::Base
- Rhino::RhinoModel
- 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
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