以下代码适用于在Invoice show视图中创建新交易。但是在admin命名空间中它不起作用。即/ admin / invoices / 1 /但适用于/发票/ 1 /
show.html.erb
<%= form_for([@invoice, @invoice.transactions.build]) do |form| %>
....
transactions form input
的routes.rb
resources :invoices do
resources :transactions
end
答案 0 :(得分:0)
在form_for
等命名空间路由中调用/admin/invoices/1/
时,Rails会自动将admin
附加到您的路由中。换句话说,form_for([@invoice, @invoice.transactions.build])
会张贴到/admin/invoice/:id/transactions/
而非/invoice/:id/transactions/
的路线。
要修复,请显式设置表单的URL并使用路由帮助程序方法来推断正确的路由:
form_for(@invoice, url: invoice_transaction_url(@invoice.id))
请注意,您可能需要使用正确的路线替换invoice_transaction_url
。使用rake routes
查找与所需控制器POST操作对应的辅助方法。