0

我有以下用于创建产品的代码:

def create
    @customer = Customer.find(params[:customer_id])
    @product = @customer.products.build(params[:product])

    respond_to do |format|
      if @product.save
        format.html { redirect_to customer_products_path(@customer), notice: 'Product was successfully created.' }
      else
        format.html { render action: "new" }
        format.json { render json: customer_products_path.errors, status: :unprocessable_entity }
      end
    end
  end

要生成我使用的表单:

<%= form_for([@customer, @product]) do |f| %>

现在,我想知道,如何在将数据保存到数据库之前将使用转移到单独的确认页面。还带有编辑链接,因此如果需要,用户可以进行更改并最终提交记录。

我查看了有关 stackoverflow 的其他问题,但无法创建我想要的内容。任何指导表示赞赏。

4

2 回答 2

1

如果要进行客户端确认,则需要使用 JavaScript 来监听“表单提交”事件。然后,您使用 jQuery html() 显示一个灯箱,询问是否继续。这将与使用 onsubmit 事件呈现确认框有关。这里讨论了另一种使用数据属性的方法

如果您想要一个数据库跟踪以进行确认(服务器端),您可以在“显示”操作中呈现您的模型,但使用一组不同的按钮。

在您的显示视图中,您将执行以下操作:

<% if @product.confirmed? %>
    ... # normal path to actions for show (edit, delete, back )
<% else %>
    <%= link_to "Confirm', confirm_product_customer_path(@product, @customer) %>
<% end %>

但是,在数据库中有一个用于确认的属性,有时有点矫枉过正。正如 Jani 在评论中所建议的,客户端确认对于大多数情况来说已经足够好了。

于 2013-05-20T13:13:57.700 回答
1

您可以使用带有参数的新按钮:

  <%= f.submit %>
  <%= f.submit "Preview", :name => 'preview' %>

在您的控制器中,在创建操作中:

if params[:preview]
@product = Product.new(params[:product])
render 'products/previw'
else
# save your object
end

并创建一个新的局部预览。

于 2013-05-20T13:24:14.087 回答