导轨。通过 has_many 进行验证:关联

问题描述 投票:0回答:1

我正在开发具有以下模型和关联的 Rails 7 应用程序。 例如,有模型和关联:

class Article < ApplicationRecord
  has_many :article_classifiers
  has_many :classifiers, through: :article_classifiers
end

class Classifier < ApplicationRecord
  has_many :article_classifiers
  has_many :article, through: :article_classifiers
end

class ArticleClassifier < ApplicationRecord
  belongs_to :article
  belongs_to :classifier
end

在创建或更新文章之前,我需要验证 Classifier 对象是否存在。在控制器中,我收到一个 classifier_ids 参数,它是一个用于与文章关联的 ID 数组。这些分类器中的一个或多个可能已被删除,因此需要在更新之前进行检查。

Rails 自动添加具有此类关联的 Article.classifier_ids 和 Article.classifier_ids= 方法。以下是我自定义这些方法以及添加访问器和自定义验证的方法:

attr_accessor :temp_classifier_ids

def classifier_ids
  classifiers.pluck(:id)
end


# Here we automatically get ids from the request parameters of the controller  
def classifier_ids=(ids)
  ids = ids.compact_blank.map(&:to_i)
  self.temp_classifier_ids = ids
  self.classifiers = Classifier.where(id: ids)
end

validate :check_classifiers_existence

def check_classifiers_existence
  return if Classifier.classifiers_exist?(temp_classifier_ids)

  errors.add(:base, 'Classifier not exist')
end

此设置有效,但我不确定这是最符合 Rails 习惯的方法。在 Rails 中保存之前验证关联分类器是否存在的最佳实践是什么?

ruby-on-rails validation rails-activerecord
1个回答
0
投票

验证:分类器,长度:{最小值:1}

© www.soinside.com 2019 - 2024. All rights reserved.