У меня есть модель ActiveRecord с несколькими установщиками виртуальных атрибутов. Я хочу построить объект, но не сохранить его в базе данных. Один сеттер должен выполняться раньше остальных. Как это сделать?
В качестве обходного пути я строю объект в два этапа
@other_model = @some_model.build_other_model
@other_model.setup(params[:other_model)
Где setup
:
class OtherModel < ActiveRecord::Base
def setup(other_params)
# execute the important_attribute= setter first
important_attribute = other_params.delete(:important_attribute)
# set the other attributes in whatever order they occur in the params hash
other_params.each { |k,v| self.send("#{k}=",v) }
end
end
Кажется, это работает, но выглядит глупо. Есть ли лучший способ?
EDIT
за предложение нейтрино , я добавил метод к SomeModel
:
class SomeModel < ActiveRecord::Base
def build_other_model(other_params)
other_model = OtherModel.new(:some_model=>self)
other_model.setup(other_params)
other_model
end
end