我目前有两个型号
位置和产品
我已将其配置为在我的生产模型中创建记录时,它会根据从产品创建期间所选位置收集的信息创建自定义URL
extend FriendlyId
friendly_id :slug_candidates, use: :slugged
def should_generate_new_friendly_id?
name_changed? or location_id_changed?
end
def slug_candidates
[
[location.media_type, location.state, location.name, :name, :sku]
]
end
我目前正在测试的是当用户决定不填写那些非常重要的字段时,它会在创建之前抛出错误消息
validates :name, presence: true
validates :sku, presence: true
validates :location_id, presence: true
在我的案例中发生的事情是它忽略了验证器并首先尝试创建slug。如果我将自定义属性删除到网址创建并列为
def slug_candidates
[
[:name, :sku]
]
end
它会正常工作,首先运行字段验证器。假设因为这两个是直接给定模型的属性。
有谁知道为什么会这样?我需要首先获取验证器,因为它包含URL的所有相关信息。
答案 0 :(得分:0)
<强>解决强>
def slug_candidates
if self.location_id.nil?
self.errors.add(:location_id)
else
[
[location.media_type, location.state, location.name, :name, :sku]
]
end
end