/
product.rb
51 lines (41 loc) · 1.14 KB
/
product.rb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
class Product < ApplicationRecord
def self.policy_class=(policy)
@policy_class = policy
end
def self.policy_class
@policy_class ||= ProductPolicy
end
has_many :line_items, dependent: :destroy
has_many :pages, dependent: :destroy
has_one :product_meta_tag, dependent: :destroy
before_validation :trim_image_url
validates :description, presence: true
validates :image_url, presence: true, format: %r{\Ahttps?://}
validates :name, presence: true
validates :price, presence: true
validates :release_year,
numericality: {
less_than_or_equal_to: ->(_product) { Time.current.year },
},
allow_blank: true
validates :slug, uniqueness: true
validates :product_meta_tag, presence: true, on: :some_unclear_situation
validate :valid_slug
accepts_nested_attributes_for :product_meta_tag
def name=(value)
self.slug = value.to_s.parameterize
super(value)
end
def to_param
slug
end
def valid_slug
if slug.blank?
errors.add :name, "must have letters or numbers for the URL"
end
end
private
def trim_image_url
image_url&.strip!
end
end