2015-05-29 8 views
1

Я работаю над назначением рельсов, который спрашивает, что я создаю список элементов. Я создал контроллер и модель для элемента, но у меня все еще есть проблемы. Я постоянно получаю следующее сообщение об ошибке:Как создать новое/создать действие для элементов?

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' - это созданная версия с зарегистрированным пользователем. – Puce

Смежные вопросы