Лучший способ создать функцию предварительного просмотра в Rails - PullRequest
2 голосов
/ 23 мая 2010

Я собираюсь реализовать функцию предварительного просмотра в своих сообщениях. Все, что мне нужно сделать, это разрешить пользователю вводить информацию в новом представлении (/ posts / new), а затем заменить кнопку отправки кнопкой предварительного просмотра.

После нажатия кнопки предварительного просмотра пользователь перенаправляется на страницу предварительного просмотра (вероятно, / posts / new / preview). Если пользователь хочет внести изменение, он нажимает «вернуться» или, если он доволен сообщением, он может отправить сообщение.

Я нашел эту статью (http://eyedeal.team88.org/node/105), но, похоже, она устарела. Есть какие-нибудь идеи о том, какой наилучший подход для этого будет?

Большое спасибо, Tony

Ответы [ 2 ]

3 голосов
/ 23 мая 2010

При отправке со страницы создания в новом действии создайте объект, но не сохраняйте его в базе данных. Затем визуализируйте объект в представлении представления с флагом, установленным в новом действии для отображения кнопки отправки. В вашем представлении показа всегда есть форма со всеми атрибутами объекта, который будет сохранен в БД в скрытых полях ввода или в отображении: ни один. Когда флаг установлен, вы показываете кнопку отправки. При отправке вы переходите к действию new_to_db, которое сохраняет объект в БД.

0 голосов
/ 23 мая 2010

Ссылка, которую вы опубликовали, является способом, но я предпочитаю сохранять объект и устанавливать логический флаг, скажем, public в false (: default => false, определенный в миграции). Тогда то, что вы в основном делаете, это фактически создаете сообщение и перенаправляете, чтобы показать действие, где у вас есть кнопка редактирования (рендер редактировать действие), кнопка «отправить» (настраиваемое действие для установки общедоступного флага в значение true) и кнопка отмены (которая фактически удаляет сообщение) и, возможно, кнопку «Продолжить позже», которая сохраняет сообщение и перенаправляет на любую другую страницу, чтобы пользователь мог вернуться позже и закончить редактирование.

Когда вам нужно показать все сообщения, определите named_scope: visible,: condition => ['posts.public =?', True] и вызовите Post.visible вместо Post.all в индексе и аналогичных действиях. Вы также можете определить default_scope с условиями ['posts.public =?', False], но помните, что если вы хотите найти сообщения, которые не видны, вам придется использовать # без_области.

Этот способ лучше, чем в вашей ссылке, потому что пользователь всегда может вернуться позже и закончить редактирование сообщения и опубликовать его. Однако вы будете хранить больше объектов в БД и иметь дело с невидимыми постами (не показывать их по умолчанию и т. Д.)

...