0

User 子クラス (Member と Partner) に、わずかに異なる 2 つのサインアップ プロセスを設定しようとしています。私はそれをしたい:

/users/sign_up ユーザーをメンバーとしてサインアップします (そのため、「メンバー」という値の非表示フィールドがあります)、それは魅力のように機能します。

しかし、私も欲しい:

/users/partner/sign_up を使用して、「パートナー」という値を示すわずかに異なるフォームを提供します。

これを 2 つの個別の URL で実現したいので、これらの異なるタイプのユーザーにサインアップ用の別のリンクを送信できます。

認証システムにDeviseを使用しています。

partner_registrations_controller のような別のコントローラーを生成し、devise から継承する必要があると確信していますが、どのコードをコントローラーに入れるべきかわかりません。

また、特定の「new.html.erb」フォームを持つ、views/users フォルダー内に新しいフォルダー「partner_registrations」を作成する必要があると思います。

そして、最終的に、次のようにルートで何かをする必要があることがわかりました。

  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で指定されたものと同じ新しいアクションと作成アクションを使用します。

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」を「Members」に置き換えました。

次に、Views / Usersフォルダーに2つの新しいフォルダーを作成しました。これは、私が得た落とし穴に注意してください。複数形にする必要があります。したがって、/membersと/content_partnersです。次に、各フォルダーに一意の「new.html.erb」ファイルを作成しました。

それでおしまい。

于 2012-12-11T10:00:23.837 に答える