Проверять значение модели активной записи, которое зависит от других моделей? - PullRequest
0 голосов
/ 26 мая 2011

У меня есть две модели:

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 и т. Д. Я пробовал вышеупомянутый подход, а также использование наблюдателя, но он хрупкий. Предложения по различным архитектурным подходам также приветствуются.

Спасибо, Джастин

Ответы [ 2 ]

2 голосов
/ 13 июля 2012

Я бы извлек логику создания из модели 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 голос
/ 26 мая 2011

Почему бы не использовать обратный вызов перед проверкой, чтобы установить вес и проверить вес в модели?(Если вы это сделаете, убедитесь, что вы принимаете во внимание условия гонки ...)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...