Вам необходимо добавить параметр блока:
def initialize(hour_id, &block)
super(nil, &block)
..
end
Вот как выглядит create!
ActiveRecord:
# File activerecord/lib/active_record/persistence.rb, line 47
def create!(attributes = nil, &block)
if attributes.is_a?(Array)
attributes.collect { |attr| create!(attr, &block) }
else
object = new(attributes, &block)
object.save!
object
end
end
Поскольку ваш .new
не принимает два параметра,create!
терпит неудачу.
Но, как сказал @ kartikey-tanna , сначала не стоит изменять инициализатор.
Рассмотрим что-нибудьнапример:
def self.create_for_hour_id!(hour_id, attributes = nil)
timereg = new(attributes)
timereg.hour_id = hour_id
yield timereg if block_given?
timereg.save!
timereg
end
И использовать обратные вызовы для настройки слагов, статуса и т. д .:
before_validation :generate_slug
private
def generate_slug
self.slug ||= SecureRandom.uuid.to_s
end