2010-09-15 108 views
0

使用Rails 3,我在根名稱空間的一些模型(例如產品),而是一個管理員::模塊中的控制器(例如管理員:: ProductsController的)。不幸的是,這似乎導致具有基本功能的問題,如的form_for(@product)生產調和管理::控制器與模型::

undefined method `products_path' for #<#<Class:0x103dc4110>:0x103dc1618> 

這大概是因爲routes.rb中的條目

namespace :admin do 
    resources :products 
end 

產生

admin_products GET /admin/products(.:format) {:action=>"index", :controller=>"admin/products"} 

與「admin_」前綴,但form_for(@product)似乎並不理解。

我想只是申報的Rails控制器編輯產品是Admin :: ProductsController的,但兩者之間的聯繫似乎缺少。我已經試過:

  • 調整在routes.rb中聲明的參數(但作爲一個總的Rails的n00b,這是完全有可能的,我錯過了正確的方式來做到這一點)
  • 尋找某種形式的聲明模型類改變方式form_for推導出_path幫手
  • 將模型移動到Admin命名空間;然而,這不僅在概念上是不受歡迎的,因爲模型對象在Admin ::之外的其他地方使用,並且與管理沒有任何特定的語義聯繫(僅僅是控制器中的編輯等),但是它也導致了測試和尤其是我無法解決的裝置。

什麼是構建這種系統的最Rails-y現代化的方式,我該如何解決這個問題?我覺得我一直在與框架戰鬥,所以如果有一個更好的方法來做到這一點,我願意提出建議,但即使我試圖通過將模型放在Admin ::中來解決問題,也只是開闢了新的問題...

回答

2

這應該做你想要什麼:form_for [:admin, @product]

0

嘗試form_for @product, :url => admin_product_path(@product)