我有两种模式:
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等的情况下工作。我已经尝试过上面的方法,以及使用观察者,但它很脆弱。对不同建筑方法的建议也表示赞赏。
谢谢, 贾斯汀
答案 0 :(得分:2)
我会从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])
答案 1 :(得分:1)
为什么不使用前验证回调来设置权重,并验证模型中的权重? (如果你这样做,请确保考虑到竞争条件......)