我正在开发具有以下模型和关联的 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 中保存之前验证关联分类器是否存在的最佳实践是什么?
验证:分类器,长度:{最小值:1}
?