Sha256: 0e3c6b28f58c3b102fb7fb61e42bae976abef611bcec742d0ca3ec191cc5e41d
Contents?: true
Size: 1.47 KB
Versions: 5
Compression:
Stored size: 1.47 KB
Contents
module Spree class OptionType < Spree::Base include Spree::UniqueName include Spree::Metadata include Spree::TranslatableResource if defined?(Spree::Webhooks::HasWebhooks) include Spree::Webhooks::HasWebhooks end if Spree.always_use_translations? TRANSLATABLE_FIELDS = %i[name presentation].freeze translates(*TRANSLATABLE_FIELDS) else TRANSLATABLE_FIELDS = %i[presentation].freeze translates(*TRANSLATABLE_FIELDS, column_fallback: true) end acts_as_list auto_strip_attributes :name, :presentation with_options dependent: :destroy, inverse_of: :option_type do has_many :option_values, -> { order(:position) } has_many :product_option_types end has_many :products, through: :product_option_types has_many :option_type_prototypes, class_name: 'Spree::OptionTypePrototype' has_many :prototypes, through: :option_type_prototypes, class_name: 'Spree::Prototype' validates :presentation, presence: true default_scope { order(:position) } scope :filterable, -> { where(filterable: true) } accepts_nested_attributes_for :option_values, reject_if: ->(ov) { ov[:name].blank? || ov[:presentation].blank? }, allow_destroy: true after_touch :touch_all_products def filter_param name.parameterize end def self.color find_by(name: 'color') end private def touch_all_products products.update_all(updated_at: Time.current) end end end
Version data entries
5 entries across 5 versions & 1 rubygems