私は、既存のRailsモデル、Spree :: Variantにfriendly_idスラッグを追加しようとしています。すでに所有しているスラグのあるバリアントbelongs_to Product(Spreeとこれらのモデルはサードパーティーの宝石のものです)。friendly_idスラグは生成されませんが、呼び出されるメソッド
バリアントを保存しようとすると、スラッグが生成され、データベースの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
が呼び出されたことを確認して、必要な情報を出力しました。私のアプリからの戻り値の例は "Titanium"です。
なぜ私のスラッグは作成されませんか?どこで問題をさらに絞り込むことができますか?