По какой-то причине этот код может создавать повторяющиеся игры, если разные пользователи запускают его одновременно:
game = Game.find_or_create_by(
status: Game::STATUS[:waiting],
category_id: params[:category_id],
private: 0
) do |g|
is_new = true
g.user = current_user
end
Я не могу четко понять, в чем дело, но, вероятно, дело в разных процессах Unicorn, которые используют разные соединения с базой данных, поэтому транзакции могут выполняться параллельно.
Если это так, мне нужен правильный способ избежать этого, возможно, мне следует использовать транзакции Rails или блокировки Postgres, но мне действительно нужен пример использования.
Спасибо.
is_new
используется в следующем коде, чтобы знать, что запись только что создана. - person Alexander Zinchuk   schedule 22.05.2014