ruby on rails-资源生成器和控制器生成器之间的区别



当我进行时

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

相关内容

  • 没有找到相关文章

最新更新