我希望在我的帖子脚手架中实现预览功能。我需要做的就是允许用户在新视图(/posts/new)中输入信息,然后用预览按钮替换提交按钮。
单击预览按钮后,用户将被路由到预览页面(可能是/posts/new/preview)。如果用户想要进行更改,他们会单击“返回”,或者如果他们对帖子感到满意,则可以提交帖子。
我找到了这篇文章(http://eyedeal.team88.org/node/105),但它似乎过时了。关于什么是最好的方法的任何想法是什么?
非常感谢,托尼
我希望在我的帖子脚手架中实现预览功能。我需要做的就是允许用户在新视图(/posts/new)中输入信息,然后用预览按钮替换提交按钮。
单击预览按钮后,用户将被路由到预览页面(可能是/posts/new/preview)。如果用户想要进行更改,他们会单击“返回”,或者如果他们对帖子感到满意,则可以提交帖子。
我找到了这篇文章(http://eyedeal.team88.org/node/105),但它似乎过时了。关于什么是最好的方法的任何想法是什么?
非常感谢,托尼
在从创建页面提交时,在新操作中,构建对象但不要将其保存到数据库中。然后在其显示视图中渲染对象,并在新操作中设置标志以显示提交按钮。在您的显示视图中,始终在隐藏输入字段或 display:none 中保存一个包含对象所有属性的表单。设置标志后,您将显示提交按钮。提交时,您转到将对象保存到数据库的 new_to_db 操作。
您发布的链接是一种方式,但我更喜欢保存对象并设置一个布尔标志,让我们说 public 为 false (:default => false 在迁移中定义)。然后你基本上做的是实际上创建帖子并重定向到显示操作,你有编辑按钮(渲染编辑操作),发布按钮(自定义操作将公共标志设置为true)和取消按钮(实际上删除了帖子)和也许稍后继续按钮,它保留帖子并重定向到任何其他页面,因此用户可以稍后回来并完成编辑。
当您需要显示所有帖子时,定义一个 named_scope :visible, :conditions => ['posts.public = ?', true] 并在 index 和类似操作中调用 Post.visible 而不是 Post.all。您还可以使用条件 ['posts.public = ?', false] 定义 default_scope,但请记住,如果您想查找不可见的帖子,则必须使用 #without_scope。
这种方式比链接中的方式更好,因为用户可以稍后再回来完成编辑帖子并发布它。但是,您将在数据库中存储更多对象并且必须处理不可见的帖子(默认情况下不显示它们等)