我正在进行铁路分配,要求我创建一个项目列表。我为项目创建了控制器和模型,但仍然遇到了一些麻烦。我一直收到以下错误:
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 :(得分: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
答案 1 :(得分:0)
您已在用户下嵌套了您的商品资源。它应该是 user_items_path 。
答案 2 :(得分: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
的{{1}}