资源生成器和控制器生成器之间的区别 [英] difference between resource and controller generators

查看:46
本文介绍了资源生成器和控制器生成器之间的区别的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

当我这样做时

rails g 模型用户名:字符串rails g 控制器用户索引创建新的销毁显示

并编辑 config/routes.rb 以添加:

资源:用户

bundle 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"}删除/users(.:format) {:action=>"destroy", :controller=>"users"}

但是,当我这样做时

rails g 资源用户名:字符串

(自动添加资源 :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"}删除/users/:id(.:format) {:action=>"destroy", :controller=>"users"}

所以我的问题是,

当我生成一个控制器时,我怎样才能获得正确的辅助方法来制作link_to 'Destroy', 实例, :method=> :delete工作?

因为当前它给出了一个错误 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

因此,user_path 未定义,而 users_path 已定义.

when I do

rails g model user name:string
rails g controller users index create new destroy show

and edit config/routes.rb to add:

resource :users

bundle exec rake routes gives:

     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"}

however, when I do

rails g resource users name:string

(which automatically adds resources :users to config/routes.rb) bundle exec rake routes

I get

    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"}

So my question is,

when I generate a controller how can I get the correct helper methods to make link_to 'Destroy', instance, :method=> :delete work?

Because currently it gives an error user_path is not defined.

解决方案

You should call

rails g controller user index create new destroy show

instead of

rails g controller users index create new destroy show

in order to get resources :users to give you the helpers you want.

The latter causes Rails to assume that users is a singular object, and that resources :users should create what is called a singular resource:

http://guides.rubyonrails.org/routing.html#singular-resources

as a result, user_path is undefined, whereas users_path is defined.

这篇关于资源生成器和控制器生成器之间的区别的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆