app/models/pens/model.rb
class Pens::Model < ApplicationRecord
has_many :model_micro_clusters,
foreign_key: :pens_model_id,
class_name: "Pens::ModelMicroCluster",
dependent: :nullify
has_many :model_variants, through: :model_micro_clusters
has_many :micro_clusters, through: :model_variants
has_many :collected_pens, through: :micro_clusters
paginates_per 100
scope :ordered, -> { order(:brand, :model) }
def self.search(query)
return self if query.blank?
query = query.split(/\s+/).join("%")
joins(model_micro_clusters: :model_variants).where(
<<~SQL,
CONCAT(pens_model_variants.brand, pens_model_variants.model)
ILIKE ?
SQL
"%#{query}%"
).group("pens_models.id")
end
def name
"#{brand} #{model}"
end
end