[Rails] devise에 열 추가

8224 단어 RubyRails

왜 썼어요?


devise로 사용자 인증을 하면 이메일과password는 처음부터 있었지만 가입자는 이름이 필요하죠.나는 항상 이렇게 생각하기 때문에 적어 둔다.

전제 조건

  • devise의gem
  • 이 추가되었습니다.
  • rails g devise User

    열 추가


    DB에 열을 추가할 때는 일반적으로 다음과 같은 쓰기 방법을 사용합니다.
    어쨌든 그 이전 파일을 뭘 하는지 알 수 있는 파일 이름으로 만들자.
    이름을 붙일 때 AddColumnToUsers 가 '사용자 테이블에 열을 추가합니다' 라는 뜻으로 쓰이면 다음 열을 추가할 때 이름이 번거롭기 때문에 주의해야 합니다.가열=DB 디자인을 잘해야 한다고 생각했는데 아직 이 분야에 대한 지식이 얕아서 좀 강한 사람에게 알려주셨으면 좋겠어요.
    $ rails generate migration Addカラム名Toテーブル名 追加するカラム:データ型
    
    $ rails generate migration AddNameToUsers name:string
    
    XXXXXXXXXXX_add_name_to_users.rb
    class AddNameToUsers < ActiveRecord::Migration[5.2]
      def change
        add_column :users, :name, :string
      end
    end
    
    $ rails db:migrate
    

    Controller 및 View 수정


    registrations/new.html.erb
    <h2>Sign up</h2>
    
    <%= form_for(resource, as: resource_name, url: registration_path(resource_name)) do |f| %>
      <%= render "devise/shared/error_messages", resource: resource %>
    
        # ここから追加
     <div class="field">
        <%= f.label :name %><br />
        <%= f.text_field :name, autofocus: true %>
      </div>
        # ここまで
    
      <div class="field">
        <%= f.label :email %><br />
        <%= f.email_field :email, autofocus: true, autocomplete: "email" %>
      </div>
    
      <div class="field">
        <%= f.label :password %>
        <% if @minimum_password_length %>
        <em>(<%= @minimum_password_length %> characters minimum)</em>
        <% end %><br />
        <%= f.password_field :password, autocomplete: "new-password" %>
      </div>
    
      <div class="field">
        <%= f.label :password_confirmation %><br />
        <%= f.password_field :password_confirmation, autocomplete: "new-password" %>
      </div>
    
      <div class="actions">
        <%= f.submit "Sign up" %>
      </div>
    <% end %>
    
    <%= render "devise/shared/links" %>
    
    뷰에서 날아온name의 정보를 받기 위해
    application_controller.rb
    에 다음과 같은 내용을 추가한다.
    application_controller.rb
    class ApplicationController < ActionController::Base
      before_action :configure_permitted_parameters, if: :devise_controller?
    
      protected
      def configure_permitted_parameters
        devise_parameter_sanitizer.permit(:sign_up, keys: [:name])
      end
    end
    
    다음 코드는 application.html.erb에 기술됩니다.current_user는 devise가 제공하는 방법 중 하나로 로그인한 사용자의 정보를 얻을 수 있다.
    application.html.erb
    <% if current_user.present? %>
      <p>こんにちは、<%= current_user.name %>さん!</p>
    <% else %>
      <p>こんにちは、ゲストさん!</p>
    <% end %>
    
    잘 나오면 오케이!
  • 좋은 웹페이지 즐겨찾기