情况:
订单由ordercontroller创建方法创建到订单表中。
然后,视频由videoordercontroller创建方法上载到与order_id相关联的videoorder表中。
我在订单显示页面中将其上传到订单:
<%= form_for([@order, @video_order]) do |form| %>
<%= form.file_field :video %>
<%= form.submit "Upload", class: "btn btn-success" %>
此表单在提交后从技术上消失了,但是我正在测试更新视频,因为我还希望能够在上传错误视频的情况下更新视频。
我尝试过:
<%= form_for([@order, @video_order], :url => edit_order_video_order_path(@order.id, @video_order), remote: true ) do |form| %>
<%= form.file_field :video %>
<%= form.submit "Upload", class: "btn btn-success" %>
但这给了我
"(No route matches [POST] "/orders/150/video_orders/150/edit")"
当然,这是行不通的,但我也想不通如何从同一URL页面更新视频表order_id。为了方便起见,我不想将用户转到新页面。
所以基本上,我如何允许更新视频表中的订单视频?
以下是模型: video_order模型
belongs_to :order
validates :order_id, uniqueness: true
订单订单模型
has_one :video_order
video_order模型仅具有order_id和视频。 订单模型没有video_id列。
此外,如果您发现任何关联有误或有更好的方法,请随时告诉我。
耙:
edit_order_video_order GET /orders/:order_id/video_orders/:id/edit(.:format) video_orders#edit
PATCH /orders/:order_id/video_orders/:id(.:format) video_orders#update
PUT /orders/:order_id/video_orders/:id(.:format) video_orders#update
这是在“订单显示”页面上进行的
我在订单控制器中有此方法:
def show
@user = current_user
@video_order = VideoOrder.new
end
在此上传视频。我还想允许使用单独的表单对其进行更新
答案 0 :(得分:0)
form_for
方法具有一个options
参数,您可以按以下方式将表单方法设置为“ patch”:
form_for @object, url: 'some_url', method: 'patch'
答案 1 :(得分:0)
看起来像这样,可以更新表而不创建新行:
<%= form_for(@order.video_order) do |form| %>
我当前遇到的唯一问题是重定向之后。我收到“无法重定向到零!”但我会尽快解决。
重定向必须遵循以下原则:
redirect_to order_path(@video_order.order_id)
在订单中重定向到订单显示页面
此解决方案最终变得如此简单! :)