건설 보고서: 사용자를 생성하고 편집할 컨트롤러를 준비합니다.

10099 단어 rails
어떤 포스팅인지 벌써 헤매고 있습니다. 오늘은 로그인과 등록이라는 두 가지 작업이 포함된 짧은 에피소드입니다. 포스트에서 우리는 기본 사용자 장치 컨트롤러의 기능을 확장했습니다. 오늘 우리는 그들에 몇 가지 코드를 추가할 것입니다.

한 번에 한 단계씩 사용자 등록 컨트롤러를 편집하는 것부터 시작하겠습니다. 먼저 사용자 모델을 약간 수정했으며 등록에 필요한 기본값과 다른 데이터가 필요하다고 애플리케이션에 알려야 합니다. 따라서 컨트롤러 시작 부분에 등록 및 로그인 양식에 필요한 매개변수에 영향을 주는 두 개의 매직 라인을 추가합니다.

class Users::RegistrationsController < Devise::RegistrationsController
  before_action :configure_sign_up_params, only: [:create]
  before_action :configure_account_update_params, only: [:update]


이 시점에서 컨트롤러에 업데이트 및 생성 메서드에 대한 기본 고안 작업을 재정의하고 싶다고 말했습니다. 따라서 두 가지 기능을 추가해야 합니다.

def configure_sign_up_params
    devise_parameter_sanitizer.permit(:sign_up, keys: [:email, :name, :surname, :password, :password_confirmation, :role])
  end

  def configure_account_update_params
    case current_user.role
    when 'trainee'
      trainee_attributes = [:weight, :height, :date_of_birth]
      keys = [:email, :name, :surname, :role, trainee_attributes: trainee_attributes]
    when 'trainer'
      keys = [:email, :name, :surname, :role, trainer_attributes: [:description]]
    end

    devise_parameter_sanitizer.permit(:account_update, keys: keys)
  end


둘 다 양식에서 편집하려는 필드를 정의하지만 업데이트 기능이 훨씬 더 강력하다는 것을 즉시 알 수 있습니다. 왜요?
새 사용자를 만들려면 역할에 관계없이 동일한 데이터가 필요하지만 편집은 약간 다르게 보입니다. 연수생은 체중이나 키를 변경할 수 있습니다. 이것은 트레이너에게 중요하고 트레이너는 설명을 변경할 수 있습니다. 이것은 연수생에게 중요합니다. 따라서 사용자의 역할에 따라 편집 양식에서 다른 값을 요구해야 합니다.

첫 번째 구독자가 진행 중입니다. 그들은 아직 그들이 무엇을 하고 있는지 모릅니다.

우리는 여전히 이 두 가지 작업에 사용할 레이아웃을 구별해야 합니다. 로그인을 위해 다른 레이아웃이 필요하고 사용자가 이미 애플리케이션에 로그인한 데이터를 편집하기 위해 다른 레이아웃이 필요합니다. 따라서 컨트롤러 시작 부분에 추가합니다. 위의 두 줄 뒤에 before_action을 추가합니다.

layout :resolve_layout


그리고 앞서 작성한 두 가지 방법 뒤에 하나를 더 추가합니다.

  def resolve_layout
    case action_name
    when 'edit'
      'dashboard'
    else
      'application'
    end
  end


이러한 기능은 나중에 개발하겠지만 지금은 이 상태에 만족합니다.

폴란드에서는 '잘했어'라고 말하지 않습니다. 우리는 'gra gitara'라고 말하고 그것이 아름답다고 생각합니다. 우리가 준비한 컨트롤러는 전체적으로 대략 다음과 같아야 합니다.

class Users::RegistrationsController < Devise::RegistrationsController
  before_action :configure_sign_up_params, only: [:create]
  before_action :configure_account_update_params, only: [:update]

  layout :resolve_layout

  def create
    super do
      case current_user.role
      when 'trainee'
        trainee = Trainee.new(user_id: current_user.id)
        trainee.save
      when 'trainer'
        trainer = Trainer.new(user_id: current_user.id)
        trainer.save
      end
    end
  end

  protected

  def configure_sign_up_params
    devise_parameter_sanitizer.permit(:sign_up, keys: [:email, :name, :surname, :password, :password_confirmation, :role])
  end

  def configure_account_update_params
    case current_user.role
    when 'trainee'
      trainee_attributes = [:weight, :height, :date_of_birth]
      keys = [:email, :name, :surname, :role, trainee_attributes: trainee_attributes]
    when 'trainer'
      keys = [:email, :name, :surname, :role, trainer_attributes: [:description]]
    end

    devise_parameter_sanitizer.permit(:account_update, keys: keys)
  end

  def resolve_layout
    case action_name
    when 'edit'
      'dashboard'
    else
      'application'
    end
  end
end


다음 게시물에서는 사용자 생성 및 편집, tailwindcss 설치라는 두 가지 방법에 대한 보기를 만들 것입니다.

표지 사진: 늦었어, 루나 자고 있어

좋은 웹페이지 즐겨찾기