【问题标题】:Combining Devise with resources :users in Rails将设计与资源相结合:Rails 中的用户
【发布时间】:2011-06-30 09:43:12
【问题描述】:

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

resources :users, :only => [:index, :show]
devise_for :users

但是 url localhost:3000/users/sign_up 并没有进入设计注册页面,而是产生错误“找不到 ID=sign_up 的用户”,所以它认为 url 指向节目用户控制器的操作。 我发现交换行的顺序会产生预期的行为:

devise_for :users
resources :users, :only => [:index, :show]

现在,当您转到 localhost:3000/users/sign_up 时,您确实会看到注册页面,并且转到 localhost:3000/users/1 会按预期点击用户控制器的显示操作。

我的问题是:像这样更改代码顺序是让设计与用户资源一起工作的正确方法吗?还是有更深层次的问题?我怀疑仅仅交换那两行代码不是解决方案!

【问题讨论】:

    标签: ruby-on-rails devise


    【解决方案1】:

    在 David Sulc 写的链接中显示你应该给device_for or resources 写一个前缀 示例:

    devise_for :users, :path_prefix => 'my'
    resources :users
    

    或者你的用户

    devise_for :users
    scope "/admin" do
      resources :users
    end
    

    两者都适合我

    【讨论】:

    • 您应该在答案中包含链接。
    • 感谢您的建议。完成
    【解决方案2】:

    在这些情况下,我的建议是咨询rake routes 在路由中,定义路由的顺序很重要,因为较早的路由优先。

    所以在你的情况下resources :users, :only => [:index, :show] 创建了一个指向{:action=>"show", :controller=>"users"} 的完整的/users/:id(.:format) 路由 当您访问 Devise 的注册网址 /users/sign-up 时,它认为“注册”是用户的 :id,自然找不到。

    现在,如果您先进行设计路由设置,则设计的路由优先于以后指定的任何内容,您会得到预期的行为。

    【讨论】:

    • 我仍然得到同样的错误,即使我在资源之前编写了设计。你知道为什么吗?谢谢
    【解决方案3】:

    【讨论】:

      猜你喜欢
      • 2011-07-30
      • 1970-01-01
      • 2016-11-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多