验证活动记录的模型值是否取决于其他模型?

问题描述

| 我有两个模型:
class Category < ActiveRecord::Base
  has_one :weight
  after_create :create_category_weight

  def create_category_weight
    self.weight = Weight.new :value => 1/Category.count
  end

end
和..
class Weight < ActiveRecord::Base
  belongs_to :category
  attr_accessible :value
end
我想可靠地将值设置为(1 /类别数)。我希望在category.build_weight,category.new,category.create等情况下可以使用此方法。对不同的架构方法的建议也表示赞赏。 谢谢, 贾斯汀     

解决方法

我将从ActiveRecord模型中提取创建逻辑并提取到另一个类中。就像是:
class CategoryRepository

  def new_category
    @category = Category.new
    @category.weight = Weight.new(:value => (1 / Category.count))
    @category
  end

  def create_category(attributes)
    @category = Category.create(attributes)
    @category.weight = Weight.new(:value => (1 / Category.count))
    @category.save
    @category
  end

end

@repository = CategoryRepository.new

@category = @repository.new_category

@category = @repository.create_category(params[:category])
    ,为什么不使用验证前回调来设置权重并在模型中验证权重? (如果这样做,请确保考虑到比赛条件...)