2016-04-25 77 views
1

下面的代码很适合在“发票”视图中创建新的事务。但是,它在管理员名称空间中不起作用。即/管理/发票/ 1 /但/发票/ 1/具有管理员名称空间的Rails表单生成器

show.html.erb

<%= form_for([@invoice, @invoice.transactions.build]) do |form| %> 
.... 
transactions form input 

的routes.rb工作在

resources :invoices do 
    resources :transactions 
end 
+0

渲染视图中form的'action'属性的值是多少? – Uzbekjon

+0

/invoices/1/transactions –

回答

0

当调用像一个命名空间的路线form_for/admin/invoices/1/,Rails会自动追加admin到您的路线。换句话说,form_for([@invoice, @invoice.transactions.build])将张贴到像/admin/invoice/:id/transactions/这样的路线而不是/invoice/:id/transactions/

要修正,明确设置形式的网址,并使用路由辅助方法来推断正确路线:

form_for(@invoice, url: invoice_transaction_url(@invoice.id)) 

注意,你可能需要用正确的路线,以取代invoice_transaction_url。使用rake routes查找与所需的控制器POST操作对应的帮助程序方法。

+0

感谢您的快速反馈。我的动作网址是 /发票/ 1 /交易 它似乎没有被追加。我不确定是否这是正确的,提交后我得到“未初始化的常数TransactionsController”错误,我最终在/发票/ 1 /交易而不是 管理员/ invoices/1 /交易 –

+0

什么行给你的“”未初始化的常量TransactionsController“',它是'form_for'吗?您的事务控制器是否在命名空间中定义? –

+0

是它在一个名字空间中定义的。 资源:发票做 资源:交易 结束 命名空间:管理员做 资源:交易 结束 该错误是在URL发生(/发票/ 1 /交易),没有因为发票和交易定义的路由是只能在管理员中访问。 –