2016-02-08 162 views
0

你能幫我弄清楚我做錯了什麼。似乎Ruby自動地嘗試使用我沒有定義的路徑。Ruby on Rails 4視圖NoMethodError

schema.rb

... 
     create_table "packages", force: :cascade do |t| 
     t.integer "user_id" 
     t.integer "company_id" 
     t.integer "manager_id" 
     t.string "tag" 
     ... 
     end 
    ... 

...

的routes.rb

... 
     resources :users do 
     resources :packages 
     end 
... 

packages_controller.rb

... 
    def new 
    @package = Package.new 
    @package.user_id = params[:user_id] 
    @package.manager_id = params[:manager_id] || current_user.id 
    @user = safe_find User, @package.user_id, "user" 
    @manager = safe_find User, @package.manager_id, "manager" 
    end 
... 

new.html.haml

%h1 New package 

= render 'form' 

= link_to 'Back', user_packages_path(@user) 

_form.html.haml

= form_for @package do |f| 
    = render 'shared/error_messages', object: f.object 

-# .field 
-# = f.label :tag 
-# = f.text_field :tag 


-# = render_save_back(user_path(@user)) 

錯誤接收

NoMethodError in PackagesController#new 
undefined method `packages_path' for #<#<Class:0x00000003767c00>:0x007f8b8dcd6228> 

Application Trace | Framework Trace | Full Trace 
app/views/packages/_form.html.haml:1:in `_app_views_packages__form_html_haml__2133351491984004824_70118672529040' 
app/views/packages/new.html.haml:3:in `_app_views_packages_new_html_haml___3329420746374611085_52010540' 
+0

'@ user'爲零。嘗試調試它。 – Pavan

回答

0
= form_for @package do |f| 

它自動嘗試打開@package(這是類包)到一個字符串使用它與路徑幫手。例如。 @package將嘗試調用packages_path。

要解決這個問題,也傳遞包下的資源被嵌套,就像這樣:

= form_for [@user, @package] do |f|