2012-05-28 68 views
0

我用ROR 3.2和想單獨服務於在自己的文件夾管理的目的,但使用相同的模型作爲公共控制器使用的控制器。我遇到了一個我將在這裏解釋的問題。我以不同的方式解決問題,但這更好地解釋了它。嵌套路線路徑對模型有依賴嗎?

新鮮的Rails應用程序,我運行:

rails generate scaffold admin/stats name:string value:string 

所有其他文件中它創建:

localhost:3000/admin/stats/ 

我看到了以下路線:下

create app/models/admin/stat.rb 

一切正常:

admin_stats GET /admin/stats(.:format)   admin/stats#index 
      POST /admin/stats(.:format)   admin/stats#create 
new_admin_stat GET /admin/stats/new(.:format)  admin/stats#new 
edit_admin_stat GET /admin/stats/:id/edit(.:format) admin/stats#edit 
admin_stat GET  /admin/stats/:id(.:format)  admin/stats#show 
      PUT  /admin/stats/:id(.:format)  admin/stats#update 
      DELETE /admin/stats/:id(.:format)  admin/stats#destroy 

在這裏,我的routes.rb文件:

SampleApp::Application.routes.draw do 
namespace :admin do resources :stats end 
namespace :admin do resources :users end 
root :to => 'welcome#index' 
end 

現在令我百思不解。讓我們通過界面輸入一個數據行。假設統計數據在模型/而不是模型/管理員下。我改變和移動類,改名爲表,改變了控制器的索引方法,這(以反映新的模型)

def index 
@admin_stats = Stat.all #was Admin::Stat.all 

respond_to do |format| 
    format.html # index.html.erb 
    format.json { render json: @admin_stats } 
end 
end 

爲什麼我現在訪問相同的時候看到一個不存在的方法,這個錯誤URL again localhost:3000/admin/stats /?

NoMethodError in Admin/stats#index 

Showing [...]/sample_app/app/views/admin/stats/index.html.erb where line #16 raised: 
undefined method `stat_path' for #<#<Class:0x007fe96d51a348>:0x007fe96d53a1e8> 
... 
16:  <td><%= link_to 'Show', admin_stat %></td> 

我沒有碰任何視圖文件和對象仍然是所謂@admin_stats,並通過「耙路線」創建的路線仍然是相同的預期。爲什麼它破裂? (我發現我自己的解決方案,只需具有簡單地繼承了常規模式,並使用管理員::統計作爲對象的每個模型的管理模式,但我還是想了解爲什麼這個時間)

+0

你會提供您'routes.rb'文件的內容? – larryzhao

+0

當然: SampleApp :: Application.routes.draw做 命名空間:管理員做資源:統計結束 命名空間:管理員做資源:用戶最終 根:到=>「歡迎#指數」 –

+0

也把它添加到問題。你能重現這種行爲嗎? –

回答

1

導軌支架命令你運行生成在admin下命名空間的統計模型,即Admin :: Stat。

Rails使用此型號,以生成路徑名。所以,當你改變了你的模型簡單地統計,並傳遞給的link_to helper方法,

link_to 'Show', admin_stat 

的admin_stat是可變的只是名字,它不事在這裏。 admin_stat是類Stat的對象,因此它查找stat_path。

如果你想在URL中admin/stats,那麼你需要修改的routes.rb到

scope "/admin" do 
     resources :stats 
    end 
+0

我不是,如果我明白你的意思? admin_stat仍然是迭代器範圍中變量的名稱。你是說它的名字被轉換爲下劃線命名約定+「_path」,並且檢查這個路徑是否在路由中定義?我嘗試過,並沒有什麼不同。 感謝您的初步反饋,仍然試圖瞭解爲什麼這不起作用。 –

+0

不,變量的名稱沒有什麼區別,rails使用模型的名稱,這是你的情況下的Stat,因此它尋找stat_path。希望能夠讓這個更清晰...... 至於解決方案,你是說當你向routes.rb文件中添加我提到的內容時,它仍然引發同樣的錯誤? – Dipil

+0

範圍「/ admin」do ... end does not work yes。但我也希望我的控制器/視圖在管理文件夾中,我如何使用「資源:統計」來引用子文件夾中的控制器? –