0

我正在尝试为我的用户子类 - 成员和合作伙伴设置 2 个略有不同的注册流程。我想这样做:

/users/sign_up 将用户注册为会员(因此我在其中有一个隐藏字段,其值为“会员”),它就像一个魅力。

但我也想要:

/users/partner/sign_up 提供一种稍微不同的形式,将值赋予他们“合作伙伴”。

我特别希望通过 2 个单独的 URL 实现这一点,因此我可以向这些不同类型的用户发送不同的链接进行注册。

我正在为我的身份验证系统使用设计。

我很确定我应该生成一个单独的控制器,比如 partner_registrations_controller 并让它从设计中继承,但我不知道控制器中应该有什么代码。

我还认为我需要在视图/用户文件夹中创建一个新文件夹“partner_registrations”,我将在其中拥有特定的“new.html.erb”表单。

我终于知道我需要对路线做点什么,比如:

  devise_for :users, :controllers => { :registrations => :registrations } do
      get 'users/partner/sign_up', to: 'devise/registrations#new'
  end

我已经在 github 上阅读了这个 wiki 页面:https ://github.com/plataformatec/devise/wiki/How-To:-Customize-routes-to-user-registration-pages但我对此并不明智。

任何帮助是极大的赞赏。

4

1 回答 1

0

我想通了,所以我想我会发布答案,以防其他人将来发现它有用:

路由文件:

  devise_scope :user do
    get 'sign_up', to: 'members#new', controller: {registrations: "members"}
    get 'partners/sign_up', to: 'content_partners#new', controller: {registrations: "content_partners"}
  end
  devise_for :users, controllers: {registrations: :registrations}

我为每个子类创建了 2 个单独的控制器,具有与 devise 给出的基本相同的 new 和 create 操作:

class MembersController < Devise::RegistrationsController
  def new
    resource = build_resource({})
    respond_with resource
  end

  # POST /resource
  def create
    build_resource

    if resource.save
      if resource.active_for_authentication?
        set_flash_message :notice, :signed_up if is_navigational_format?
        sign_up(resource_name, resource)
        respond_with resource, :location => after_sign_up_path_for(resource)
      else
        set_flash_message :notice, :"signed_up_but_#{resource.inactive_message}" if is_navigational_format?
        expire_session_data_after_sign_in!
        respond_with resource, :location => after_inactive_sign_up_path_for(resource)
      end
    else
      clean_up_passwords resource
      respond_with resource
    end
  end
end

我刚刚在另一个子类的控制器中将“成员”替换为“ContentPartners”。

然后我在 Views/Users 文件夹中创建了 2 个新文件夹 - 注意让我遇到的问题,它们也必须是复数形式 - 所以 /members 和 /content_partners。然后在每个文件夹中,我创建了一个独特的“new.html.erb”文件。

就是这样。

于 2012-12-11T10:00:23.837 回答