我正在尝试在rails中创建基本项目创建,但我在创建新项目时遇到问题。我想创建项目name
,比如说Wash the dishes
。这些是我的代码:
路线:
resources :items
上述ItemsController:
class ItemsController < ApplicationController
...
def new
@item = Item.new
end
def create
@item = Item.new(item_params)
if @item.save
flash[:notice] = "Item was saved!"
redirect_to @item
else
flash.now[:alert] = "ERROR. ERROR."
render :new
end
end
...
private
def item_params
params.require(:item).permit(:name, :list_id)
end
end
项/ new.html.erb
<%= form_for :item do |f| %>
<%= f.text_field :name %>
<%= f.submit %>
<% end %>
最后,架构:
create_table "items", force: :cascade do |t|
t.string "name"
t.integer "list_id"
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
...
我有几个不同的错误代码,但这是我目前所处的错误代码(有时它会显示不同的错误代码,或者只是打印出来&#34; ERROR。错误。&#34;(警告我save
失败时设置
Routing Error
No route matches [POST] "/items/new"
当我去rake路线时:
POST /items(.:format) items#create
new_item GET /items/new(.:format) items#new
我按照SO post的建议来检查我的路线,这就是我所拥有的:
2.2.2 :019 > r = Rails.application.routes
=> #<ActionDispatch::Routing::RouteSet:0x007fff323c3230>
2.2.2 :020 > r.recognize_path "/items/new"
=> {:controller=>"items", :action=>"new"}
我也去了rails c
,我可以手动创建新项目。 (i = Item.new(name:"Test 123"); i.save
)
我错过了什么?
答案 0 :(得分:1)
问题在于您的表单。要了解错误,请执行以下操作:
rails s
/items/new
。即,action属性设置为/items/new
。那是为什么?来自文档:
当模型由字符串或符号表示时,如果未指定:url选项,则默认情况下表单将被发送回当前url(我们将在下面描述form_for的替代资源导向用法,其中不需要明确指定URL。
<form action="/items/new" accept-charset="UTF-8" method="post">
在routes.rb
中,没有匹配POST /items/new
因此,请将表单修改为
<%= form_for :item, url: items_path do |f| %>
<%= f.text_field :name %>
<%= f.submit %>
<% end %>
这会生成一个表单标记,post
将数据/items
而非/items/new
。
或者用
替换您的表单<%= form_for @item do |f| %>
<%= f.text_field :name %>
<%= f.submit %>
<% end %>
现在,表单将提交给/items
。使用第二个版本的优点是您可以干掉表单以创建新对象并将现有对象更新为单个视图(部分)。
有关详情,请参阅http://guides.rubyonrails.org/form_helpers.html#binding-a-form-to-an-object
答案 1 :(得分:0)
在items / new.html.erb
中试试<%= form_for @item do |f| %>
<%= f.text_field :name %>
<%= f.submit %>
<% end %>