2010-05-23 44 views
2

我正在寻找在我的脚手架中实现预览功能。我需要做的就是允许用户在新视图(/ posts/new)中输入信息,然后用预览按钮替换提交按钮。在Rails中创建预览功能的最佳方法

一旦预览按钮被点击,用户被路由到预览页面(可能/ posts/new/preview)。如果用户想要进行更改,他们会点击“返回”,或者如果他们对帖子满意,他们可以提交帖子。

我发现这篇文章(http://eyedeal.team88.org/node/105),但它似乎过时了。任何关于最佳方法的想法是什么?

非常感谢, 托尼

回答

0

您发布的链接是一个办法,但我更喜欢保存对象,并设置一个布尔标志,假设公众假(:默认=>假迁移定义)。 然后你基本上做的是实际创建帖子并重定向到显示动作,你有 编辑按钮(渲染编辑动作), 发布按钮(自定义动作设置公共标志为真) 和取消按钮(实际上删除该帖子) ,也许继续以后的按钮,这将保留帖子并重定向到任何其他页面,以便用户稍后可以回来并完成编辑。

当您需要显示所有帖子时,定义一个named_scope:visible,:conditions => ['posts.public =?',true],并在索引和类似动作中调用Post.visible而不是Post.all。你也可以使用条件['posts.public =?',false]来定义一个default_scope,但要记住,如果你想查找不可见的帖子,你必须使用#without_scope。

这种方式比链接中的要好,因为用户总是可以稍后回来完成编辑帖子并发布它。但是,您将在数据库中存储更多对象,并且必须处理隐形帖子(默认情况下不显示它们)。

+0

我没有想过这个,这是一个好主意。但是,在这种特殊情况下,我希望能够在保存到数据库之前进行预览,因为用户帐户仍然是“如果”的想法。现在它看起来有点像craigslist,因为你不需要注册发布。感谢您的洞察! – slythic 2010-05-23 14:48:16

3

从创建页面提交时,在新操作中构建对象但不保存到数据库。然后使用新操作中设置的标志在其显示视图中呈现对象,以显示提交按钮。在你的显示视图中,总是有一个窗体,其中的对象的所有属性都将被保存到数据库的隐藏输入字段或display:none's中。当标志被设置时,你显示提交按钮。提交时,您将转到将对象保存到数据库的new_to_db操作。