将Devise与资源相结合:Rails中的用户

Baz*_*ley 16 ruby-on-rails devise

我正在尝试使用routes.rb文件中的以下代码将Devise与RESTful用户资源结合使用:

resources :users, :only => [:index, :show]
devise_for :users
Run Code Online (Sandbox Code Playgroud)

但是url localhost:3000/users/sign_up没有进入设计注册页面,而是产生错误"无法找到具有ID = sign_up的用户",因此它认为该url指向显示的动作用户控制器.我发现交换行的顺序会产生预期的行为:

devise_for :users
resources :users, :only => [:index, :show]
Run Code Online (Sandbox Code Playgroud)

现在,当你转到localhost:3000/users/sign_up时,你确实得到了注册页面,然后转到localhost:3000/users/1按照预期命中用户控制器的show动作.

我的问题是:正在改变这样的代码顺序正确的方法来使设计与用户资源一起工作?还是有更深层次的错误?我怀疑只是交换这两行代码不能解决问题!

Vla*_*ich 23

在这些情况下,我的建议是使用rake routes In路由检查路由定义的顺序,因为早期路由优先.

所以在你的情况下resources :users, :only => [:index, :show]创建了/users/:id(.:format)一条指向的restfull 路线,{:action=>"show", :controller=>"users"} 当你去Devise的注册网址时,/users/sign-up它认为:id用户注册了"注册" 并且自然无法找到它.

现在,如果您首先进行设计路由设置,则设计路线优先于稍后指定的任何路径,并且您会得到预期的行为.

  • 即使我在资源之前编写了设备,我仍然遇到相同的错误。你知道为什么吗?谢谢 (2认同)