Ruby on rails 表单选择id,然后将其传递给Rails中的“新建”表单

Ruby on rails 表单选择id,然后将其传递给Rails中的“新建”表单,ruby-on-rails,forms,controller,Ruby On Rails,Forms,Controller,我有两个嵌套的资源,因此一个产品可以有许多预订。在另一个控制器的一个页面上,我想创建一个新的预订,因为这是一个常规预订,我想在一个模式窗口中显示一个选择菜单,用户可以在其中选择一个现有产品,然后转到预订页面 我该怎么做 我没有问题设置模式和新的预订页面已经存在。我需要的是一个表单,它生成现有产品的列表,选择所选的产品id,然后获取/products/:product_id/bookings/new 澄清 我在routes中设置了两个资源: resources :products do res

我有两个嵌套的资源,因此一个产品可以有许多预订。在另一个控制器的一个页面上,我想创建一个新的预订,因为这是一个常规预订,我想在一个模式窗口中显示一个选择菜单,用户可以在其中选择一个现有产品,然后转到预订页面

我该怎么做

我没有问题设置模式和新的预订页面已经存在。我需要的是一个表单,它生成现有产品的列表,选择所选的产品id,然后获取/products/:product_id/bookings/new

澄清

我在routes中设置了两个资源:

resources :products do
  resources :bookings
end
一个产品有许多预订,因此创建新预订的路径是/products/:product\u id/bookings/new

我有另一个控制器,其中有一个视图,我需要一个按钮来创建新的预订。问题是,我不知道当单击“新建预订”按钮时,用户想要为哪个产品创建预订。为了解决这个问题,我的计划是显示一个模式窗口,其中包含一个选择所有产品的窗口,用户应该能够选择一个产品,然后重定向到/products/:product\u id/bookings/new,其中:product\u id作为所选产品

现在我有了一个可行的解决方案,但它不是很好,我已经创建了一个表单,其中有一个操作to/products/:product_id/bookings/new和with method=get。然后我用JavaScript捕获提交,更改操作,然后再次提交:

$("#new_booking_form").submit(function() { 
    var product_id = $(this).find('select').val();
    var form_action = $(this).attr("action");
    var new_form_action = form_action.replace(/product_id/, product_id);

    $(this).attr("action", new_form_action);
    $(this).submit();
});

这个解决方案有效,但非常难看!有什么建议吗?

如果我对您的理解是正确的,并且产品有很多预订,那么您可能会想要这样的产品,这就是您的路线。rb

轨道3:

resources :products do
  resource :bookings
end
轨道2:

map.resource :products do |product|
  product.resource :bookings
end
然后使用以下命令将其指向页面:

format.html { redirect_to new_product_bookings_url(@product) }

我认为您可以显示带有创建表单链接的产品列表,而不是在模式对话框中选择:

<ul>
<% Product.all.each do |product| %>
  <li><%= link_to product.name, new_product_bookings_path(product) %></li>
<% end%>
</ul>

我编辑了我的问题,希望它现在更有意义!谢谢你的回答。