2011-05-28 112 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