【问题标题】:after_create does not update Post attributeafter_create 不更新 Post 属性
【发布时间】:2020-06-19 06:03:14
【问题描述】:

我正在尝试为 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

当我在 Rails 控制台中创建 Post 时,我得到以下输出:

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-rails ruby model


    【解决方案1】:

    self.slug = 只是分配slug 变量,所以不保存到数据库。 所以你应该喜欢下面的代码。

    before_create :set_slug
    

    此代码在写入数据库之前分配给slug

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-12-09
        • 1970-01-01
        • 1970-01-01
        • 2013-11-02
        • 1970-01-01
        • 2022-01-13
        相关资源
        最近更新 更多