2011-05-28 73 views
10

当路由命名空间时,你如何处理form_for?我收到了一些我真正期望得到的奇怪的路由错误。使用命名空间路由时的路由错误

例如,假设你有一个在你的routes.rb在 您:admin命名空间称为Admin::CompaniesController控制器:

namespace :admin do 
    resources :companies 
end 

大多数事情工作得很好,但我得到一个错误,当我渲染一种新形式。下面的代码:

<%= simple_form_for(@company, :url => admin_company_path(@company)) do |f| %> 

而这里的错误消息:

ActionView::Template::Error: No route matches {:action=>"show", :controller=>"admin/companies", :id=>#<Company id: nil, name: nil, phone_number: nil, address: nil, postal_code: nil, is_enabled: true, courses_created: 0, province_id: nil, theme_id: nil, payment_plan_id: nil, created_at: nil, updated_at: nil>} 

我怎样才能得到钢轨在这里发挥好?我显然想要一个网址进行编辑,而另一个网址则需要新的表单。通常情况下,我甚至不必将:url放入我的form_for声明中,但由于嵌套,我被迫。

我不知道现在该做什么,至少不够优雅。

回答

24

使用simple_form_for([:admin, @company]) do |f|

+0

这比我上面的解决方案好多了。谢谢。我很高兴Rails有一个很好的方法来做到这一点。 – 2011-05-28 02:36:12

+0

真棒,很高兴看到它为你工作。祝你的程序好运! – 2011-05-28 02:37:52

+0

太棒了!在这里也有同样的问题,使用simple_form 3.0.0从Rails 4.0.0迁移到4.0.1。谢谢! – tomasmuller 2013-11-08 11:55:31

0

尝试,我相信我只需要在路径的末尾变复数的路径,像这样:

<%= simple_form_for(@company, :url => admin_companies_path(@company)) do |f| %> 

这不是我本来期望。我只是猜对了。这不是一个有效的路线或任何东西,但它似乎适用于投放和帖子。

+0

如果你这样做,你需要设置一个不同的网址,如果你正在编辑或创建一个新的条目 - 新的条目将使用admin_companies_path和编辑将使用admin_company_path(@company),但上面的解决方案更好因为它适用于编辑和新建。 – 2013-05-27 21:26:55