ruby-on-rails - after_create 不更新 Post 属性
问题描述
我正在尝试为Post
模型创建回调。回调应该更新slug
post 属性。这是中的相关代码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
当我创建一个Post
in 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
?我会很感激任何帮助。
解决方案
after_create 回调在对象保存后触发。如果您修改一个属性,它将不会再次保存。Before_create 应该可以工作:)
推荐阅读
- javascript - 嵌套字符串插值或延迟字符串插值
- html - 如何降低我在 PageSpeed Insights 上的 LCP 分数?
- c++ - 如何从 Unreal Engine C++ 发送 GraphQL 请求?
- youtube - 用于确定视频所有权的 Content ID API
- python - 在python中读取由空格分隔的数字列表的最有效方法是什么?
- java - Java,selenium:单击后如何检查元素中的 src 更改并使用 if 语句进行验证
- r - 如何合并 R 中的列表并将某些列添加到有重复项的地方?
- php - Woocommerce - 如果购物车中有 4 件来自同一类别、具有相同变化的商品,则设置新价格
- wordpress - WordPress 自定义菜单用法
- shell - 使用shell脚本将多行合并为一行