2012-09-19 56 views
1

我已經使用rails scaffold自動生成表單和視圖。 但是現在我必須在root namspace中使用名稱空間控制器和模型。如何在rails中處理form_for namspaced控制器

因此,我手動生成控制器沒有腳手架,我在使用窗體時遇到了麻煩。

我想,下面的代碼應該產生用於命名空間控制器

<%= form_for @menu do |f| %> 

    <div class="field"> 
    <%= f.label :label %><br /> 
    <%= f.text_field :label %> 
    </div> 
    <div class="field"> 
    <%= f.label :order %><br /> 
    <%= f.text_field :order %> 
    </div> 
    <div class="actions"> 
    <%= f.submit %> 
    </div> 
<% end %> 

形式,但它不。它說

undefined method `model_name' for NilClass:Class 

似乎很容易做到腳手架發電機軌,但如果一個人想這樣做手工,軌道輔助方法,打開他們負。

...我已經尋找的form_for文檔和改變了代碼

<%= form_for @menu, :url => admin_menu_path do |f| %> 

那麼它就會顯示不同的錯誤

No route matches {:action=>"show", :controller=>"admin/menus"} 

我耙路線給出了下面的輸出

 admin_root  /admin(.:format)    admin/menus#index 
    admin_menus GET /admin/menus(.:format)   admin/menus#index 
       POST /admin/menus(.:format)   admin/menus#create 
new_admin_menu GET /admin/menus/new(.:format)  admin/menus#new 
edit_admin_menu GET /admin/menus/:id/edit(.:format) admin/menus#edit 
    admin_menu GET /admin/menus/:id(.:format)  admin/menus#show 
       PUT /admin/menus/:id(.:format)  admin/menus#update 
       DELETE /admin/menus/:id(.:format)  admin/menus#destroy 

糾正我,如果我錯了,但我認爲紅寶石無法找到模型菜單管理命名空間,whi ch是顯而易見的。所以,我嘗試:: Menu.new,我認爲它會查找上部命名空間,但沒有結果!

回答

3

你可能忘記在控制器中實例化@menu

消息「未定義的方法'model_name'爲NilClass:Class」說@menunil

由於admin_menu_path需要一個Menu實例,因此在傳遞nil時,Rails無法正確生成路由。

一旦你已經在你的控制器實例變量正確設置你可以使用:

form_for [:admin, @menu] do |f| ... end 
+0

是它的工作,但我不明白的form_for是如何工作的呢,我havnt添加菜單。新的索引方法,因爲它會創建一個新的模型,如果我想在索引中放置一個表單,我該怎麼辦? – pahnin

+0

它只創建一個'Menu'的新實例,而不是數據庫中的一個記錄,這是最簡單和最推薦的方法來創建一個數據庫資源的表單,在這裏你可以得到一些關於'form_for'如何工作的信息:http://api.rubyonrails.org/classes/ActionView/Helpers/FormHelper.html#method-i-form_for –

+0

好的,明白了,臨終關懷NKS – pahnin