1

У меня две модели, администраторы и пользователи. Я установил scoped views = true в devise.rb. Я также создал два разных набора разрабатываемых представлений. По какой-то причине, когда я нажимаю на регистрацию прав администратора, он дает мне ошибкуDevise Views with Multiple Models

NoMethodError in Aregistrations#edit 
undefined method `email' for nil:NilClass 

Он подчеркивает это:

<%= gravatar_for @user %> 

и указывает на «приложение/просмотров/изобрести/регистрации/edit.html .erb»

В моей "конфигурации/инициализатора/devise.rb" файл имеет:

config.scoped_views = true 

В моем "конфигурации/routes.rb" файла У меня есть

devise_for :admins, :controllers => {:registrations => "aregistrations"} 
devise_for :users, :controllers => {:registrations => "registrations"}, :path_prefix => 'd' 
resources :users, :only =>[:show] 

В моих "приложение/контроллерах/aregistrations_controller.rb" У меня есть

def update 
    new_params = params.require(:admin).permit(:email, :username, :current_password, :password, :password_confirmation) 
    change_password = true 
    if params[:admin][:password].blank? 
    params[:admin].delete("password") 
    params[:admin].delete("password_confirmation") 
    new_params = params.require(:admin).permit(:email, :username) 
    change_password = false 
    end 

    @admin = Admin.find(current_admin.id) 
    is_valid = false 

    if change_password 
    is_valid = @admin.update_with_password(new_params) 
    else 
    is_valid = @admin.update_without_password(new_params) 
    end 

    if is_valid 
    set_flash_message :notice, :updated 
    sign_in @admin, :bypass => true 
    redirect_to after_update_path_for(@admin) 
    else 
    render "edit" 
    end 
end 

В моих взглядах У меня есть папка для разработки - для модели пользователя и папки администраторов для модели администратора.

В моей «приложение/просмотров/изобрести/регистрации/edit.html.erb» У меня есть

<%= gravatar_for @user %> 
<a href="http://gravatar.com/emails">change</a></br></br></br></br> 

Я его настроить, чтобы изменить свой профиль и ваше gravtar изображение для пользователей только.

В моей «приложение/просмотров/макеты/_header.html.erb» файла У меня есть

<% if admin_signed_in? %> 
<li><%= link_to "Edit Account", edit_admin_registration_path %></li> 
<% else %> 
..... 
<% end %> 

Почему Разрабатывают ищет пользователя Gravatar, когда я нажимаю на редактирование админы путь и область видимости взгляды?

-------------------- редактировать В моем ** "приложение/контроллерах/users_controller.rb" ** файл

class UsersController < ApplicationController 
before_filter :authenticate_admin!, :except => [:show] 

  def index 
    @users = User.paginate(page: params[:page]) 
  end 

  def show 
    @user = User.find_by_username(params[:id]) 
    @reviews = @user.reviews.paginate(page: params[:page]) 
  end 
end 

ответ

5

Я решил это с помощью другого сообщения Override Devise Registrations Controller Two Times? Я обнаружил, что мне нужно создать каталог в моем «app/controllers». Это, как вы используете контекстный контроллер:

«приложение/контроллеры/админ/registrations_controller.rb»

class Admin::RegistrationsController < Devise::RegistrationsController 
    #Your Code Here 
end 

я могу оставить свой первый контроллер и сохранить его для пользователей «приложение/контроллеров/registrations_controller.гь»

class RegistrationsController < Devise::RegistrationsController 
    #Your Code Here 
end 

Мой „конфигурации/routes.rb“ будет выглядеть следующим образом:

devise_for :admins, :controllers => {:registrations => "admins/registrations"} 
devise_for :users, :controllers => {:registrations => "registrations"} 
+0

Совет, чтобы иметь подкаталог в приложении/контроллерах, является ключевым для настройки scoped_views. Благодарю. – craigq

0

С внешний вид этого метода в Пользователе не был установлен должным образом. Вы пытались перезапустить сервер так, чтобы конфигурация загружалась правильно?

+0

вы имеете в виду CRTL C, чтобы остановить сервер и рельсы с, чтобы запустить его снова я сделал? что да – Daniel

+0

Где вы определили @user? –

+0

Я добавил мой users_controller – Daniel