设计:在rails中添加现有用户的新用户

时间:2014-06-28 08:39:28

标签: ruby-on-rails-4 devise

在rails项目中,我使用devise来管理我的用户。现在我希望从sign up删除login-page,只有已经存在的用户才能注册新用户。

最好的方法是什么?

1 个答案:

答案 0 :(得分:0)

要从登录页面删除注册链接,请安装设计视图并从" shared / links"中删除该链接。部分。

在您的终端中,生成设计视图:

$ cd path/to/app
$ rails generate devise:views users

在创建的文件夹views / devise中,编辑文档shared / _links.html.erb以仅包含您要显示的链接。

要仅允许现有用户创建新用户,您至少需要对Devise :: RegistrationsController控制器操作new和create进行限制。这有点复杂,需要创建自定义Devise注册控制器。

为此,在控制器文件夹中创建一个名为registrations_controller.rb的文件,并更新routes.rb文件以将devise_for:user指向该新控制器。要将操作限制为已登录的用户,请仅考虑使用Devise帮助程序" authenticate_user!"。所有这些建议可能如下所示:

#controllers/registration_controllers.rb

class RegistrationsController < Devise::RegistrationsController
  before_action :authenticate_user!, only: [:new, :create]

  def new
    super
  end

  def new
    super
  end

end

你的路线

#config/routes.rb

devise_for :users, :controllers => { :registrations => "registrations" }

理想情况下,在视图中,未登录的用户甚至不应该选择尝试创建新用户,因此应该有一些额外的视图逻辑,例如:

<% if user_signed_in? %>
  <%= link_to "New user", new_user_registration_path %>
<% end %>

要清理视图,您可以考虑将这样的条件视图逻辑提取到帮助程序中。

通过此设置,现有用户将能够通过new_user_registration_path创建新用户。

有关更多信息,Devise文档非常有用(https://github.com/plataformatec/devise)以及仔细阅读其他StackOverflow答案。