Rails - Before_validation无法生成项目

时间:2014-07-01 21:43:59

标签: ruby-on-rails ruby activerecord

这是我的模特:

 validates :name, uniqueness: true, presence: true
 validates :slug, uniqueness: true, presence: true

 # Callbacks
 before_validation :generate_slug

 # Methods
 def to_param
    slug
 end

 def generate_slug
    self.slug ||= name.parameterize
 end

在尝试创建新记录时,我收到错误消息:" Slug无法通过我的浏览器显示空白"

那就是说 - 当使用Ruby控制台进行测试时,它运行得很完美:

 Item.create! name:"Stack Overflow"
 ["slug", "stack-overflow"], ["name", "Stack Overflow"]

不知道从哪里开始,任何想法如何让这个错误发挥得很好?

1 个答案:

答案 0 :(得分:2)

create回调之后看看Rails guidesvalidations回调,因此在验证您的generate_slug方法时,如果尚未调用,则slu is是没有。

您可能希望使用before_validation代替


修改

也许你的slug在你的验证之前不是nil,可能是由于数据库默认值或表单字段发布,请尝试使用此代码

def generate_slug
  self.slug = name.parameterize if self.slug.blank?
end