Я думаю, что вы хотите использовать обратный вызов активной записи для выполнения той работы, которая вам необходима, связанной с созданием данных.
Или используйте шаблон проектирования сервисных объектов для выполнения всех действий.
Или вы можете просто добавить код для выполнения задачи после создания в качестве метода и вызвать метод напрямую, а не вызывать его с помощью обратного вызова.
Или эта функциональность может существовать на модели. Все эти варианты можно рассматривать как «путь Rails» в зависимости от того, с кем вы разговариваете.
Мой предпочтительный метод будет ...
В controllers/my_object_contoller.rb
def create
@object = MyObject.create(my_object_params)
my_private_method
end
private
def my_private_method
# create auxiliary data objects here
end
Также посмотрите на Ассоциации ActiveRecord
Поскольку существуют способы создания двух моделей данных, которые программно связаны или связаны друг с другом с использованием идентификаторов foreign_key для столбцов БД.
Rails предлагает вам отличный API, который я привел в руководстве по рельсам выше.
Такая реализация с использованием активных ассоциаций записей может выглядеть следующим образом ...
# 'app/models/user.rb
class User < ActiveRecord::Base
has_one :address
...
end
# 'app/models/address.rb'
class Address < ActiveRecord::Base
belongs_to :user
...
end
# 'db/migrate/<timestamp>_create_users.rb'
class CreateUsers < ActiveRecord::Migration[5.2]
def change
create_table :users do |t|
t.string :email
t.string :first_name
t.string :last_name
t.timestamps
end
end
end
# 'db/migrate/<timestamp>_create_addresses.rb'
class CreateAddresses < ActiveRecord::Migration[5.2]
def change
create_table :addresses do |t|
t.references :user, null: false, foreign_key: true
t.string :house_number, null: false
t.string :streen_name
t.string :city
t.string :state
t.string :zip_code
t.timestamps
end
end
end
Это дает нам новый способ манипулирования нашими данными. Если мы создаем нового пользователя и дополнительные данные, которые мы хотим добавить, это адрес пользователя. Затем мы можем просто собрать все эти данные в форме и затем использовать методы, которые дает нам помощник has_one. Например ...
def create
@user = User.new(params[:user])
@address = Address.new(params[:address])
@user.address = @address
@user.save
end
Конечно, это весь псевдокод, поэтому вам действительно стоит погрузиться в активную ссылку на запись, которую я разместил выше