当我做的时候
rails g model user name:string
rails g controller users index create new destroy show
并编辑config / routes.rb以添加:
resource :users
捆绑exec rake路由给出:
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
(自动添加资源:用户到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'Destroy',instance,:method => :删除 工作?
因为当前它给出了错误,所以没有定义user_path。
答案 0 :(得分:12)
你应该致电
rails g controller user index create new destroy show
而不是
rails g controller users index create new destroy show
为了让resources :users
为您提供所需的帮助。
后者导致Rails假设users
是一个单数对象,而resources :users
应该创建一个所谓的奇异资源:
http://guides.rubyonrails.org/routing.html#singular-resources
因此,user_path
未定义,而users_path
已定义。
答案 1 :(得分:1)
使用rails g controller
并指定方法名称时,生成器仅将特定路由映射到routes文件。 rails g resource
假定您需要整个资源功能,并将映射resources
。
为了解决这个问题,只需进入您的路径文件并用资源调用替换特定的映射。
resources :users
答案 2 :(得分:0)
我真正想要的是为现有模型创建一个工作(具有正确的删除/显示路径)控制器的方法(如问题中所述),但只是添加“resource:x”并生成控制器是不够的
我最终使用了scaffold_controller生成器。它不会创建任何迁移或模型,但会生成包含视图的资源,rake paths
命令会显示删除和显示正常的路径。
答案 3 :(得分:0)
您可以在控制台中运行以下命令:
$rails g model user name:string
$rails g scaffold_controller User
并将此代码行添加到文件routes.rb:
resources :users