Rails Generate Devise:Controllers未起作用

8

简单的问题。

我正在使用Rails 4.1.4Devise 3.3.0来开发我的应用程序。

我正在尝试生成Devise的控制器,以便我可以覆盖一些行为。

文档说要运行...

rails generate devise:controllers [scope]

... 来生成控制器到app/controllers/scope中,以便您可以修改它们。但是当我运行前面的命令时,它一直显示没有生成器devise:controllers

找不到 generator devise:controllers。

有人知道为什么吗?。

谢谢。

更新

实际上,当我运行...

rails generate

... 来检索可用的生成器列表时,我会得到以下输出,针对Devise生成器:

Devise:

devise

devise:install

devise:views

所以显然,devise:controllers生成器不在那里。有办法添加它吗?。怎么做?。

谢谢。


可能会有帮助吗?http://excid3.com/blog/rails-3-could-not-find-generator-deviseinstall/ - Rahul Dess
4个回答

15

已解决

我刚刚手动创建了控制器,并让它继承自 Devise。例如:

class Users::RegistrationsController < Devise::RegistrationsController
    # Override the action you want here.
end

这个控制器应该放在 app/controllers/users/registrations_controller.rb。如果你有其他的scope,就使用app/controllers/scope/registrations_controller.rb。例如,如果你有一个admin范围,那么它将是app/controllers/admins/registrations_controller.rb

最好。

更新

根据blushrt的评论,我忘记了提到修改config/routes.rb,以便让Devise为特定资源使用创建的控制器。例如,对于users,您应该在config/routes.rb中添加:

devise_for :users, controllers: { registrations: "users/registrations" }

就是这样。最好的。


3

回答OP最初的问题"有人知道为什么吗?"

问题在于这个生成器目前只在Devise的主分支上可用,如GitHub issue所述。

如果你想在发布之前使用此功能,可以将以下内容添加到你的Gemfile中:

gem 'devise', git: 'https://github.com/plataformatec/devise'

2

3
您可以手动创建一个控制器并让它从devise继承。例如,对于注册控制器,如果您想要覆盖会话控制器,请从Devise :: SessionsController导入。 - Joel

0
把这个放在这里,以防其他人也遇到了这个(愚蠢的)问题。我无法弄清楚为什么对 /users 的 POST 请求一直路由到 Devise::RegistrationsController#create 而不是 Users::RegistrationsController#create。
原因是什么呢?
我的 routes.rb 文件中有一个拼写错误。
  devise_for :users, controllers: { registations: 'users/registrations }

注意,我写成了registations而不是registrations。

因此,请小心检查您的路由中是否有拼写错误。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接