Ссылка, которую вы опубликовали, является способом, но я предпочитаю сохранять объект и устанавливать логический флаг, скажем, public в false (: default => false, определенный в миграции).
Тогда то, что вы в основном делаете, это фактически создаете сообщение и перенаправляете, чтобы показать действие, где у вас есть
кнопка редактирования (рендер редактировать действие),
кнопка «отправить» (настраиваемое действие для установки общедоступного флага в значение true)
и кнопка отмены (которая фактически удаляет сообщение)
и, возможно, кнопку «Продолжить позже», которая сохраняет сообщение и перенаправляет на любую другую страницу, чтобы пользователь мог вернуться позже и закончить редактирование.
Когда вам нужно показать все сообщения, определите named_scope: visible,: condition => ['posts.public =?', True] и вызовите Post.visible вместо Post.all в индексе и аналогичных действиях. Вы также можете определить default_scope с условиями ['posts.public =?', False], но помните, что если вы хотите найти сообщения, которые не видны, вам придется использовать # без_области.
Этот способ лучше, чем в вашей ссылке, потому что пользователь всегда может вернуться позже и закончить редактирование сообщения и опубликовать его. Однако вы будете хранить больше объектов в БД и иметь дело с невидимыми постами (не показывать их по умолчанию и т. Д.)