资源和控制器生成器之间的区别

当我做

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)捆绑exec rake路由

我明白了

  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’,实例,:method =>:删除工作?

因为当前它给出了错误,所以没有定义user_path。

你应该打电话

 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

因此, users_path未定义,而users_path已定义。

使用rails g controller并指定方法名称时,生成器仅将特定路由映射到routes文件。 rails g resource假定您需要整个资源function并将映射resources

为了解决这个问题,只需进入您的路由文件并用资源调用替换特定的映射。

 resources :users 

我真正想要的是为现有模型创建一个工作(具有正确的删除/显示路径)控制器的方法(如问题中所述),但只是添加“resource:x”并生成控制器是不够的。

我最终使用了scaffold_controller生成器。 它不会创建任何迁移或模型,但它会生成带有视图和rake paths命令的资源命令显示删除和显示工作的正确路径。

您可以在控制台中运行以下命令:

 $rails g model user name:string $rails g scaffold_controller User 

并将此代码行添加到routes.rb文件中:

 resources :users