Вы используете очередь, поэтому объект не будет создан до тех пор, пока задание не будет обработано.
Очередь лучше всего использовать для процессов, которые не зависят от времени (отправка пакета электронных писем,обновление данных из внешнего API и т. д.);в этом случае звучит так, как будто вы хотите, чтобы объект был доступен немедленно, и в этом случае очередь не подходит:
def create
object = Object.create!(name: params[:name])
# object.id => 3
end
Судя по вашим комментариям, вы обеспокоены тем, что условия гонки приводят к появлению названия.не быть уникальным.В этом случае вы захотите использовать ограничение уникальности в базе данных.Это можно добавить с помощью миграции, используя следующий вызов:
add_index :objects, :name, unique: true
Вы также можете использовать блокировку таблиц, но Rails не предоставляет API для этого, поэтому вам придется использовать сырой SQL.
Примечание: я предполагаю, что вы просто используете Object
в качестве заполнителя для названия вашей модели, но на всякий случай: Object
является корнем по умолчанию для всех объектов Ruby, поэтому выне следует переопределять его как модель ActiveRecord.