0

我正在寻找正确的方法来包含和preview动作之间newcreate动作。假设我有以下内容:

resources :users

默认情况下,提交表单时:

  • 如果new,调用create动作;
  • 如果edit,请update采取行动。

这样一来,我就可以对 and 使用相同的形式(部分)了newcreate太棒了!

如何配置资源以包含preview操作之间的操作。我的意思是,强迫new打电话preview,然后preview打电话create

我可以添加一个新的路线/动作并指向该动作的表单,但是相同的表单不能用于newand edit

有没有办法配置资源来做到这一点?

4

3 回答 3

1

看看这个 railscast: multibutton form,它显示了一个带有“预览”和“提交”按钮的表单,也许这是你可能想要做的事情。

顺便说一句,您不能通过将局部变量传递给局部变量来使用相同的形式吗?例如:

<%= form_for @profile, url: dynamic_path do |f| %>
  ...
<% end %>

<%= render 'form', dynamic_path: profile_preview_path %>
于 2013-02-13T13:04:23.660 回答
0

你有几种方法可以做到这一点:

  1. 您将表单的 url 更改为您的preview操作(您必须为其添加路线)。
  2. 您使用您的创建操作进行预览和创建:
    即您向表单提交请求添加一个参数(如“:go_to_preview”)。如果你在你渲染的控制器中找到它preview
    当用户想要确认预览时,您再次提交数据(不带该参数),这次创建记录。

还有另外两种动态可能性:

  1. 您实时创建预览 - 如果可能的话(就像这里一样) - 并且只使用create动作,
  2. 第一个选项的变体:当用户提交表单时,您向操作发送ajax 发布请求preview,呈现部分并将其包含在页面上,然后当您的用户仍然拥有他刚刚填写的表单时,用户决定是否她肯定想修改或提交。
于 2013-02-13T15:56:07.020 回答
-2

我建议添加一个 DateTime 列“finished_at”、“published_on”等......任何适合您的域的内容。

以博客文章为例:

scope :published, where("published_on IS NOT NULL")
scope :draft, where(:published_on => nil)

在适当的地方使用范围和新字段来限制后续操作。

这种方法给你的比你要求的多:

  1. 一种基于“状态”来限制处理的方法
  2. 创建时间与发布时间的数据
于 2013-02-13T12:59:49.800 回答