Один из наиболее распространенных способов сделать это - использовать обратные вызовы ActiveRecord
class Post
after_create :create_metrics
private
def create_metrics
# methods created by has_one, suggested in the comments
create_basic_metric(additional_attrs)
create_complex_metric(additional_attrs)
end
end
Другой вариант, который у вас есть, - переписать метод, созданный has_one
, то есть:
class Post
has_one: :basic_metric
has_one: :complex_metric
def basic_metric
super || create_basic_metric(additional_attrs)
end
def complex_metric
super || create_complex_metric(additional_attrs)
end
end
Таким образом, они не будут создаваться автоматически с какой-либо новой публикацией, а будут создаваться по требованию при вызове метода.