skip:registration vs remove:registerable

时间:2014-03-14 12:15:08

标签: ruby-on-rails devise

假设我想创建一个没有自行注册的模型用户。 我创建了用户模型并添加了以下行

devise :database_authenticatable, :registerable,
     :recoverable, :rememberable, :trackable, :validatable

在我的routes.db文件中,我跳过了注册

devise_for :users, skip: :registrations

当我运行rake routes注册路径消失时。

但是,我可以从User模型中删除:registerable而不是添加`skip :: registrations来获得相同的配置。

所以问题是:删除自我注册的两种方式之间的主要区别是什么?哪个更优选?

2 个答案:

答案 0 :(得分:8)

如果您对用户注册不感兴趣,两个选项都会给您相同的结果,但我更喜欢从用户模型中删除registerable模块以避免加载它而根本不使用它。

您可以在下一个链接中看到devise方法,这样您就可以通过不加载模块来了解您要避免的内容: https://github.com/plataformatec/devise/blob/master/lib/devise/models.rb#L77

另一方面,如果您对通过任何子类(比如买方或卖方,使用STI)而不是类本身(用户)的用户注册感兴趣,则需要用户模型上的registerable模块等在路线上:

devise_for :users, skip: :registrations
devise_for :buyers, only: :registrations
devise_for :sellers, only: :registrations

我希望它有所帮助。

答案 1 :(得分:1)

想要删除注册路线可能还有其他原因 - 例如。制作指向Devise控制器的路线。

如果您确实要禁用网站注册,请从用户模型中删除:registerable