我有一个看起来像这样的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
答案 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 %>
最后你说的是提交后信息丢失了,所以在你的创建操作中放一个调试器并测试数据是否实际保存。如果无效,请发布您的控制器代码。