在创建友好ID之前对表单字段进行验证 - 自定义

时间:2014-03-14 21:50:35

标签: validation url ruby-on-rails-4 friendly-id

我目前有两个型号

位置产品

我已将其配置为在我的生产模型中创建记录时,它会根据从产品创建期间所选位置收集的信息创建自定义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的所有相关信息。

1 个答案:

答案 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