Вам нужно сделать это, переопределив метод initialize
, чтобы иметь возможность сделать что-то подобное в вашем контроллере и заставить его просто работать:
ExampleModel.new(:extra_params => "Hello world", :enabled => true)
Ваша модель будет выглядеть примерно такниже, который переопределяет инициализацию, сначала вызывает super
для установки любых доступных атрибутов, а затем устанавливает extra_params
с помощью нашего пользовательского установщика.Мы должны сделать это в этом порядке, потому что, как вы упомянули, мы должны убедиться, что enabled
установлено и возвращает правильное логическое значение, когда мы решаем, устанавливать или нет extra_params
.
class ExampleModel < ActiveRecord::Base
def initialize(attrs={})
super(attrs)
self.extra_params = attrs.fetch(:extra_params, nil)
end
def extra_params=(value)
self[:extra_params] = value if enabled?
end
end
При использовании этого метода порядок установки параметров при обновлении объекта не должен иметь значения.