2015-05-29 38 views
1

我正在研究一個rails任務,要求我創建一個項目列表。我爲物品創建了控制器和模型,但仍然遇到一些麻煩。我不斷收到以下錯誤:如何爲項目創建新/創建操作?

undefined method `items_path' for 

下面是我的一些代碼:

class ItemsController < ApplicationController 
    def new 
    @item = Item.new 
    end 

    def create 
    @item = Item.new(params.require(:item).permit(:name)) 
    if @item.save 
     flash[:notice] = "Item was saved." 
     redirect_to @item 
    else 
     flash[:error] = "There was an error saving the item. Please try again." 
     render :new 
    end 
    end 
end 

產品型號:

class Item < ActiveRecord::Base 
    belongs_to :user 
end 

New.html.erb在項目

class Item < ActiveRecord::Base 
    belongs_to :user 
end 

Routes.rb:

Rails.application.routes.draw do 
    devise_for :users 
    resources :users do 
    resources :items, only: [:new, :create] 
    end 

    get 'welcome/index' 
    root :to => 'welcome#index' 
end 

Item.html.erb

<%= form_for @item do |f| %> 
    <%= f.label :name %> 
    <%= f.text_field :name %> 

    <%= f.submit "Save" %> 
<% end %> 
+0

您正在使用'@的form_for item'在你的意見中,是嗎?添加相關代碼可能會改善問題,但問題似乎很明顯。 –

+0

Yup剛剛添加了視圖,對此感到抱歉 –

+0

http://stackoverflow.com/questions/2034700/form-for-with-nested-resources –

回答

3
resources :users do 
    resources :items, only: [:new, :create] 
end 

內用戶這將巢項目路線。檢查rake routes,如果你想使用你需要更新你的表單和控制器嵌套的路線,你不會得到這個items_path

你必須定義resource :items得到items_path

因此,如果不只是路線resource :items

<%= form_for [@user, @item] do |f| %> 
    <%= f.label :name %> 
    <%= f.text_field :name %> 

    <%= f.submit "Save" %> 
<% end %> 

和控制器

def new 
    @item = Item.new 
    @user = current_user 
end 
0

你嵌套你的項目下的用戶資源。它應該是user_items_path

0

這些項目嵌套在用戶下,因此他們總是必須有相應的用戶。例如/users/1/item/3

如果登錄用戶是一個創建的項目,你的表格應該是這樣的:

<%= form_for [current_user, @item] do |f| %> 
    <%= f.label :name %> 
    <%= f.text_field :name %> 

    <%= f.submit "Save" %> 
<% end %> 

如果你可以爲其他用戶創建的項目,必須在新的行動創造一個@user實例控制器,然後更改爲current_user@user

+0

'current_user'是一個devise創建的變量與記錄的用戶。 – Puce