【发布时间】:2014-08-11 13:20:32
【问题描述】:
我正在通过 Mike Hibbert 的视频学习 rails,使用的是 windows 7、rails 4.0.2 和 ruby 2.0。
在这个“https://www.youtube.com/watch?v=fr8u3l6RWOQ&list=UUFW_fvwCoF44MGWk74U_rFg”我应该创建一个“Todo List”,但是我不能创建一个新的Todo,我不知道为什么。 我每次都会收到此错误:
ActionController::UrlGenerationError in Todoo#new
Showing c:/Users/Suporte 2/MikeHibbert/todo/app/views/todoo/new.html.erb where line #2 raised:
No route matches {:id=>#<Todoo id: nil, created_at: nil, updated_at: nil, done: nil>} missing required keys: [:id]
Extracted source (around line #2):
1 <h1>Add new item to your todoo list</h1>
2 <% form_for @todo, :url => todoo_path(@todo) do |f|%>
3 <%= f.label :name %>: <%= f.text_field :name %>
4 <%= f.hidden_field :done, :value => false %>
5 <%= f.submit "Add to todoo list" %>
Rails.root: c:/Users/Suporte 2/MikeHibbert/todo
Application Trace | Framework Trace | Full Trace
app/views/todoo/new.html.erb:2:in `_app_views_todoo_new_html_erb__1061113415_24422844'
这是我的 routes.rb:
Todo::Application.routes.draw do
devise_for :users
root :to => "home#index"
resources :todoo
end
我在 todoo_controller 中的“创建”功能:
def new
@todo = Todoo.new
end
def todo_params
params.require(:todoo).permit(:name, :done, :id)
end
def create
@todo = Todoo.new(todo_params)
if @todo.save
redirect_to todoo_index_path, :notice => "Your todo item was created!"
else
render "new"
end
end
我的new.html.erb:
<h1>Add new item to your todoo list</h1>
<% form_for @todo, :url => todoo_path(@todo) do |f|%>
<%= f.label :name %>: <%= f.text_field :name %>
<%= f.hidden_field :done, :value => false %>
<%= f.submit "Add to todoo list" %>
<% end %>
还有我的rake路线:
Prefix Verb URI Pattern Controller#Action
new_user_session GET /users/sign_in(.:format) devise/sessions#n
ew
user_session POST /users/sign_in(.:format) devise/sessions#c
reate
destroy_user_session DELETE /users/sign_out(.:format) devise/sessions#d
estroy
user_password POST /users/password(.:format) devise/passwords#
create
new_user_password GET /users/password/new(.:format) devise/passwords#
new
edit_user_password GET /users/password/edit(.:format) devise/passwords#
edit
PATCH /users/password(.:format) devise/passwords#
update
PUT /users/password(.:format) devise/passwords#
update
cancel_user_registration GET /users/cancel(.:format) devise/registrati
ons#cancel
user_registration POST /users(.:format) devise/registrati
ons#create
new_user_registration GET /users/sign_up(.:format) devise/registrati
ons#new
edit_user_registration GET /users/edit(.:format) devise/registrati
ons#edit
PATCH /users(.:format) devise/registrati
ons#update
PUT /users(.:format) devise/registrati
ons#update
DELETE /users(.:format) devise/registrati
ons#destroy
root GET / home#index
todoo_index GET /todoo(.:format) todoo#index
POST /todoo(.:format) todoo#create
new_todoo GET /todoo/new(.:format) todoo#new
edit_todoo GET /todoo/:id/edit(.:format) todoo#edit
todoo GET /todoo/:id(.:format) todoo#show
PATCH /todoo/:id(.:format) todoo#update
PUT /todoo/:id(.:format) todoo#update
DELETE /todoo/:id(.:format) todoo#destroy
记住我正在使用 devise gem 来管理用户。
谁能帮忙解决这个问题?
【问题讨论】:
-
尝试从表单中删除
, :url => todoo_path(@todo)。 -
已尝试,出现以下错误:'code'NoMethodError in Todoo#new Showing c:/Users/Suporte 2/MikeHibbert/todo/app/views/todoo/new.html.erb where line #2 提出:#:0x4cf5048> 的未定义方法 `todoos_path'
-
把这个方法
def todo_params params.require(:todoo).permit(:name, :done, :id) end放在控制器底部private下 -
没用,出现同样的错误。
标签: ruby-on-rails ruby ruby-on-rails-4 devise