mirror of
https://0xacab.org/sutty/sutty
synced 2024-11-26 12:36:22 +00:00
feat: obtener valores desde la base de datos #7537
This commit is contained in:
parent
ecf44311ea
commit
84419c05f8
3 changed files with 17 additions and 19 deletions
|
@ -34,6 +34,20 @@ class IndexedPost < ApplicationRecord
|
||||||
scope :in_category, ->(category) { where("front_matter->'categories' ? :category", category: category.to_s) }
|
scope :in_category, ->(category) { where("front_matter->'categories' ? :category", category: category.to_s) }
|
||||||
scope :by_usuarie, ->(usuarie) { where("front_matter->'usuaries' @> :usuarie::jsonb", usuarie: usuarie.to_s) }
|
scope :by_usuarie, ->(usuarie) { where("front_matter->'usuaries' @> :usuarie::jsonb", usuarie: usuarie.to_s) }
|
||||||
|
|
||||||
|
# Trae todos los valores únicos para un atributo
|
||||||
|
#
|
||||||
|
# @param :attribute [String,Symbol]
|
||||||
|
# @return [Array]
|
||||||
|
scope :everything_of, ->(attribute) do
|
||||||
|
where('front_matter ? :attribute', attribute: attribute)
|
||||||
|
.pluck(
|
||||||
|
Arel.sql(
|
||||||
|
ActiveRecord::Base::sanitize_sql(['front_matter -> :attribute', attribute: attribute])
|
||||||
|
)
|
||||||
|
)
|
||||||
|
.flatten.uniq
|
||||||
|
end
|
||||||
|
|
||||||
belongs_to :site
|
belongs_to :site
|
||||||
|
|
||||||
# La ubicación del Post en el disco
|
# La ubicación del Post en el disco
|
||||||
|
|
|
@ -74,8 +74,10 @@ MetadataTemplate = Struct.new(:site, :document, :name, :label, :type,
|
||||||
|
|
||||||
# Valores posibles, busca todos los valores actuales en otros
|
# Valores posibles, busca todos los valores actuales en otros
|
||||||
# artículos del mismo sitio
|
# artículos del mismo sitio
|
||||||
|
#
|
||||||
|
# @return [Array]
|
||||||
def values
|
def values
|
||||||
site.everything_of(name, lang: lang)
|
site.indexed_posts.everything_of(name)
|
||||||
end
|
end
|
||||||
|
|
||||||
# Valor actual o por defecto. Al memoizarlo podemos modificarlo
|
# Valor actual o por defecto. Al memoizarlo podemos modificarlo
|
||||||
|
|
|
@ -317,24 +317,6 @@ class Site < ApplicationRecord
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
# Trae todos los valores disponibles para un campo
|
|
||||||
#
|
|
||||||
# TODO: Traer recursivamente, si el campo contiene Hash
|
|
||||||
#
|
|
||||||
# TODO: Mover a PostRelation#pluck
|
|
||||||
#
|
|
||||||
# @param attr [Symbol|String] El atributo a buscar
|
|
||||||
# @return Array
|
|
||||||
def everything_of(attr, lang: nil)
|
|
||||||
Rails.cache.fetch("#{cache_key_with_version}/everything_of/#{lang}/#{attr}", expires_in: 1.hour) do
|
|
||||||
attr = attr.to_sym
|
|
||||||
|
|
||||||
posts(lang: lang).flat_map do |p|
|
|
||||||
p[attr].value if p.attribute? attr
|
|
||||||
end.uniq.compact
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
# Poner en la cola de compilación
|
# Poner en la cola de compilación
|
||||||
def enqueue!
|
def enqueue!
|
||||||
update(status: 'enqueued') if waiting?
|
update(status: 'enqueued') if waiting?
|
||||||
|
|
Loading…
Reference in a new issue