skip:registration vs remove:registerable

fad*_*ack 6 ruby-on-rails devise

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

devise :database_authenticatable, :registerable,
     :recoverable, :rememberable, :trackable, :validatable
Run Code Online (Sandbox Code Playgroud)

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

devise_for :users, skip: :registrations
Run Code Online (Sandbox Code Playgroud)

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

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

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

bac*_*rhh 11

如果您对用户注册不感兴趣,两个选项都会给您相同的结果,但我更喜欢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
Run Code Online (Sandbox Code Playgroud)

我希望它有所帮助.