我创建了这个模块:
应用程序/模型/关注/sluggable.rb
module Sluggable
extend ActiveSupport::Concern
included do
before_create :set_slug
end
def set_slug
if self.slug.nil?
puts 'adding slug'
self.slug = SecureRandom.urlsafe_base64(5)
end
end
end
我将它包含在模型中,如下所示:
应用程序/模型/plan.rb
class Plan < ApplicationRecord
extend FriendlyId
friendly_id :id, :use => :slugged
include Sluggable
end
但 before_create 不会触发。slug 列是 not_null 列,因此出现数据库错误。
错误:“slug”列中的空值违反非空约束
如果将 set_slug 代码直接放在模型中,它可以工作。那么我在这里缺少关于 Rails 5 中的关注点的什么?
我想知道它是否与使用 FriendlyId 有关(这就是我首先添加 slug 的原因!)