正在更新与订单关联的联接表...继续创建而不是更新

时间:2018-11-30 06:02:53

标签: ruby-on-rails ruby

情况:

订单由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

在此上传视频。我还想允许使用单独的表单对其进行更新

2 个答案:

答案 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)

在订单中重定向到订单显示页面

此解决方案最终变得如此简单! :)