Я пытаюсь добавить слаг friendly_id в существующую модель Rails, Spree::Variant. Вариант принадлежит продукту, у которого уже есть собственные слаги, которые отлично работают (Spree и эти модели взяты из стороннего гема).
Когда я пытаюсь сохранить вариант, я ожидаю, что слаг будет сгенерирован и сохранен в поле slug
в базе данных, но поле остается NULL.
Вот код моей модели:
Spree::Variant.class_eval do
extend FriendlyId
friendly_id :slug_candidates, :use => :slugged
validates :slug, length: { minimum: 3 }, allow_blank: true, uniqueness: true
self.whitelisted_ransackable_attributes = %w[weight sku slug]
def parent_slug
self.product.slug
end
def option_value_list
if !self.option_values.nil? && self.option_values.length > 0
opts = self.option_values.collect{ |v|
v.presentation }.join('-')
return opts
else
return ''
end
end
def slug_candidates
[
[:parent_slug, :option_value_list],
[:parent_slug, :option_value_list, :sku]
]
end
def should_generate_new_friendly_id?
puts "Is new #{new_record?}, is blank #{slug.blank?}" #Is new false, is blank true when updating test record
new_record? || slug.blank?
end
end
На подобные вопросы отвечают, чтобы убедиться, что should_generate_new_friendly_id?
определено правильно, как здесь. Я проверил, что он вызывается и возвращает True, когда я обновляю запись, но запись все еще не заканчивается слагом.
Я также проверил, что option_value_list
вызывается и выводит нужную информацию. Пример возвращаемого значения из моего приложения: «Титан».
Почему мой слаг не создается? Куда я могу обратиться, чтобы еще больше сузить проблему?