当我进行时
rails g model user name:string
rails g controller users index create new destroy show
并编辑config/routes.rb添加:
resource :users
bundle exec rake routes给出:
users POST /users(.:format) {:action=>"create", :controller=>"users"}
new_users GET /users/new(.:format) {:action=>"new", :controller=>"users"}
edit_users GET /users/edit(.:format) {:action=>"edit", :controller=>"users"}
GET /users(.:format) {:action=>"show", :controller=>"users"}
PUT /users(.:format) {:action=>"update", :controller=>"users"}
DELETE /users(.:format) {:action=>"destroy", :controller=>"users"}
然而,当我做时
rails g resource users name:string
(它自动添加资源:users到config/routes.rb)捆绑执行耙路由
我得到
users GET /users(.:format) {:action=>"index", :controller=>"users"}
POST /users(.:format) {:action=>"create", :controller=>"users"}
new_user GET /users/new(.:format) {:action=>"new", :controller=>"users"}
edit_user GET /users/:id/edit(.:format) {:action=>"edit", :controller=>"users"}
user GET /users/:id(.:format) {:action=>"show", :controller=>"users"}
PUT /users/:id(.:format) {:action=>"update", :controller=>"users"}
DELETE /users/:id(.:format) {:action=>"destroy", :controller=>"users"}
所以我的问题是,
当我生成一个控制器时,我如何获得正确的助手方法link_to"销毁",实例,:方法=>:删除工作
因为当前它给出了一个错误,所以没有定义user_path。
您应该调用
rails g controller user index create new destroy show
而不是
rails g controller users index create new destroy show
以便让CCD_ 1为您提供所需的帮助。
后者导致Rails假设users
是一个奇异对象,并且resources :users
应该创建所谓的奇异资源:
http://guides.rubyonrails.org/routing.html#singular-资源
结果,user_path
是未定义的,而users_path
是定义的。
使用rails g controller
并指定方法名称时,生成器仅将特定路由映射到路由文件。rails g resource
假设您想要整个资源功能,并将映射resources
。
为了解决这个问题,只需进入路由文件,并用资源调用替换特定的映射。
resources :users
我真正想要的是为现有模型创建一个工作(具有正确的删除/显示路径)控制器的方法(如问题中所述),但仅仅添加"resource:x"并生成控制器是不够的。
我最终使用了脚手架控制发电机。它不创建任何迁移或模型,但它确实生成了一个带有视图的资源,rake paths
命令显示了删除和显示的正确路径。
您可以在控制台中运行以下命令:
$rails g model user name:string
$rails g scaffold_controller User
并将此代码行添加到文件routes.rb:
resources :users