Rails 5 belongs_to 范围验证

Rails 5 belongs_to scoped validation

假设我有这个模型:

class Post < ApplicationRecord
  enum post_type: { post: 0, page: 1 }

  belongs_to :user
end

默认情况下 rails 5 将使 belongs_to :user 关联成为必需。如果您传递 optional: true 将使该关联成为可选的。但我想要的是 belongs_to :user 关联仅在 post_typepagepost 为必需时才可选。

如何在 belongs_to :user 行完成?

此时此刻我正在这样做:

class Post < ApplicationRecord
  enum post_type: { post: 0, page: 1 }

   belongs_to :user, optional: true
   validates :user_id, presence: { scope: post? } 
end

但这会给我这样的错误:

NoMethodError: undefined method `post?' for #

这是正确的做法吗?或者还有其他方法?

可以使用 if 选项验证 user 存在:

validates :user, presence: true, if: :post?