Rails form_for如何更新或创建新的?

时间:2013-10-30 16:36:20

标签: ruby-on-rails form-for

我有一个看起来像这样的form_for:

<%= form_for (@product||(Product.new([some params])), :remote => true, :as => :product_data, :url => {:controller => :products, action: :update}, :html => {:class => 'form-horizontal'} do |f| %>
...
<%= f.submit %>

在我的控制器中,我有'更新'动作。

当@product已经存在时,表单工作得很好。它发送到控制器中的“更新”操作。 当@product不存在时,它正在创建一个新的临时产品实例,但提交表单并不保存它。因此,在页面刷新时,信息会丢失。

如果@product存在,我如何同时'更新'并使用相同的表单创建新的+更新表格如果@product不存在?

已解决:

在产品控制器的更新操作中,我添加了:

product = Product.where(some params).first rescue nil
if product.blank?
product = Product.create(some values)
end

1 个答案:

答案 0 :(得分:3)

请发布控制器代码,而不是

@product||(Product.new([some params])
在视图中

,您可以将其指定为

@product = Product.find(id) || Product.new([some params])

在控制器内部并将视图设为

<%= form_for @product, :remote => true, :as => :product_data, :url => {:controller => :products, action: :update}, :html => {:class => 'form-horizontal'} do |f| %>
...
<%= f.submit %>

最后你说的是提交后信息丢失了,所以在你的创建操作中放一个调试器并测试数据是否实际保存。如果无效,请发布您的控制器代码。