Ruby on Rails:ActiveRecord对象创建的确认页面

时间:2009-01-15 01:07:57

标签: ruby-on-rails ruby activerecord

使用Ruby on Rails我想在创建ActiveRecord对象之前有一个确认页面。用户将在提交之前看到他们正在创建的项目的预览,并且将对象保存在数据库中

一种常见的模式;

  • 用户访问/输入/新
  • 用户输入详细信息并点击提交
  • 用户被重定向到/ entry / confirm,显示条目并单击提交或编辑以更正错误
  • 保存对象

你会如何实现它?

4 个答案:

答案 0 :(得分:5)

解决此问题的另一个选项是将虚拟确认属性添加到模型中。这样,就不需要为此创建单独的操作:


class MyRecord < ActiveRecord::Base
  attr_accessor :confirmation
  validates_acceptance_of :confirmation, :on => :create
end

现在,您的新对象将无法正确保存,因为确认字段上的验证将失败。您可以检测到这种情况并提供如下内容:


<% form_for(@my_record) do |form| %>
  ...
  <%= form.check_box :confirmation %> Really create this record.
  <%= submit_tag('Confirm') %>
<% end %>

答案 1 :(得分:5)

我可能会为该模型的routes.rb文件添加“预览”操作:

map.resource :objects, :new => { :preview => :post }

您可以通过发布preview命名路由来实现此preview_object_url操作。您需要以与Object操作相同的方式创建create,如下所示:

def preview
  @object = Object.new(params[:object])
end

然后,此页面将POST到create操作,然后创建对象。这很直接。

http://api.rubyonrails.org/classes/ActionController/Resources.html

答案 2 :(得分:4)

一些选项

1-在会话中存储您要创建的对象,直到您点击确认页面,然后将其保存

在每个帖子周围传递2个/从新提交的提交 - &gt;详情 - &gt;确认

我可能会选择2,因为我不容易在会话中保存状态。

答案 3 :(得分:0)

我不确定如何做到这一点(RoR对我来说是新手),但您可以将/ new的操作指定为/ confirm,然后调用create。

右?