首页 > 解决方案 > after_create 不更新 Post 属性

问题描述

我正在尝试为Post模型创建回调。回调应该更新slugpost 属性。这是中的相关代码post.rb

class Post < ApplicationRecord
  after_create :set_slug

  SLUG_FILTER = '/\!?@#$`\'%^&*+=",.()[]{}‘’'

  private

   def set_slug
     self.slug = title.delete(SLUG_FILTER).strip.gsub(/\s+/,'-').downcase
   end
end

当我创建一个Postin rails 控制台时,我得到这个输出:

irb> author(1).posts.create!(title: 'some post title', markdown: 'test **123**')
=> #<Post id: 25, title: "some post title", markdown: "test **123**", ..., slug: "some-post-title">
irb> Post.find(25)
=> #<Post id: 25, title: "some post title", markdown: "test **123**", ..., slug: nil>

似乎该slug属性已创建,但随后变为nil. 为什么是slug属性nil而不是some-post-title?我会很感激任何帮助。

标签: ruby-on-railsrubymodel

解决方案


after_create 回调在对象保存后触发。如果您修改一个属性,它将不会再次保存。Before_create 应该可以工作:)


推荐阅读