Ruby on Rails:在创建对象之前创建确认视图

时间:2013-05-20 13:02:28

标签: ruby-on-rails ruby ruby-on-rails-3

我有以下代码来创建产品:

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上的其他问题,但无法创建我想要的内容。任何指导都表示赞赏。

2 个答案:

答案 0 :(得分:1)

如果您想进行客户端确认,则需要使用JavaScript来监听“表单提交”事件。然后使用jQuery html()显示要求继续的灯箱。它与using onsubmit eventrendering a confirmation box有关。另一种使用数据属性的方法是here

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

在你的节目视图中,你会这样做:

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

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

答案 1 :(得分:1)

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

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

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

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

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