Ошибка отключения регистрации для модели Devise - Devise | Рельсы 5.2 - PullRequest
0 голосов
/ 02 июля 2018

Я работаю над проектом Rails 5.2 с двумя моделями Devise (Admin и User). Я следовал предложению в этом ответе переполнения стека , чтобы отключить регистрацию для модели Devise, не нарушая edit_admin_registration_path.

Devise.

После применения изменений, предложенных в routes.rb, запуск rails routes показывает, что изменения работают должным образом, однако при редактировании Admin (edit_admin_registration_path) я получаю ошибку:

NoMethodError in Admins::RegistrationsController#edit
undefined method `validatable?' for nil:NilClass

Я подозреваю, что проблема заключается в том, что связанный ответ не использовал несколько моделей Devise с областями видимости и контроллерами.

Есть идеи?

Я добавил это к routes.rb:

devise_scope :admin do
  get "/sign_in" => "admins/sessions#new" # custom path to login/sign_in
  get "/sign_up" => "admins/registrations#new", as: "new_admin_registration" # custom path to sign_up/registration
end

devise_for :admins, skip: [ :registrations ], path: 'admins', controllers: { sessions: 'admins/sessions', registrations: 'admins/registrations' }
  as :admins do
    get 'admins/edit' => 'admins/registrations#edit', as: 'edit_admin_registration'
    put 'admins' => 'admins/registrations#update', as: 'admin_registration'
  end

Форма просмотра:

<%= form_for(resource, as: resource_name, url: registration_path(resource_name), method: :put) do |f| %>
  <%= devise_error_messages! %>

  <%= f.label :email %><br />
  <%= f.email_field :email, autofocus: true, autocomplete: "email", class: "form-control" %>

  <% if devise_mapping.confirmable? && resource.pending_reconfirmation? %>
    <div>Currently waiting confirmation for: <%= resource.unconfirmed_email %></div>
  <% end %>

  <%= f.label :password %> <i>(leave blank if you don't want to change it)</i><br />
  <%= f.password_field :password, autocomplete: "off", class: "form-control" %>
  <% if @minimum_password_length %>
    <em><%= @minimum_password_length %> characters minimum</em>
  <% end %>

  <%= f.label :password_confirmation %><br />
  <%= f.password_field :password_confirmation, autocomplete: "off", class: "form-control" %>

  <%= f.label :current_password %> <i>(we need your current password to confirm your changes)</i><br />
  <%= f.password_field :current_password, autocomplete: "off", class: "form-control" %>

  <%= f.submit "Update", class: "btn btn-success" %>
<% end %>

1 Ответ

0 голосов
/ 04 июля 2018

Ответ найден:

Маршруты должны быть настроены так (как можно найти в этом ответе переполнения стека ):

devise_for :admins, :skip => [:registrations], path: 'admins', controllers: { sessions: 'admins/sessions', registrations: 'admins/registrations' }

devise_scope :admin do
  get 'admins/edit' => 'admins/registrations#edit', as: 'edit_admin_registration'
  put 'admins' => 'admins/registrations#update', as: 'admin_registration'
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...