Ruby On Rails에서 속성의 기본값을 설정하는 방법

Ruby on Rails에서 속성의 기본값을 설정하는 것이 문제가 될 수 있다고 생각한 적이 있습니까?

매개변수 없이 새 모델을 생성하면 속성이 초기화되지 않기 때문에 속성 유형에 따라 기본값이 설정됩니다.

불필요한 정보로 데이터베이스를 채우고 싶지 않다면 이것은 매우 좋은 생각입니다.

Ruby on Rails는 기본값을 추가할 수 있는 많은 옵션을 제공하지만 모두 좋은 것은 아닙니다.

다음은 기본값을 추가하는 방법에 대한 좋은 예 목록입니다.
  • 옵션 1: 마이그레이션을 통해 데이터베이스에서 직접 기본값을 설정합니다.
  • 옵션 2: after_initialize 콜백을 사용합니다.
  • 옵션 3: before_validate 콜백을 사용합니다. nil인 경우에만 모델에 기본값을 설정합니다.

  • 옵션 1: 마이그레이션을 통해 데이터베이스에서 직접 기본값 설정



    Ruby on Rails에서는 마이그레이션의 일부로 포함하여 데이터베이스의 속성에 대한 기본값을 설정할 수 있습니다.

    구문은 default: 'value' 입니다.

    이는 한 번에 많은 속성을 정의하려는 경우에 유용하며 db/schema.rb 파일을 볼 때 기본값이 무엇인지 한 눈에 쉽게 확인할 수 있습니다.

    class CreateUsers < ActiveRecord::Migration
      def change
        create_table :users do |t|
          t.string :name, default: "First Last", null: false
        end
      end
    end
    


    옵션 2: after_initialize 콜백 사용



    개발자가 기본값을 설정하는 데 도움이 되는 콜백after_initialize이 있습니다.
    특히 일부 계산을 수행해야 하는 경우.

    이 콜백은 모델이 시작된 후 호출되며 개발자는 모델을 업데이트하기 전에 기본값에 액세스할 수 있습니다.

    예를 들어 앱에서 사용자의 기본 이름을 설정하고 싶다고 가정해 보겠습니다.

    class User < ApplicationRecord
      after_initialize :set_defaults
    
      def set_defaults
        name = "First Last"
      end
    end
    


    옵션 3: before_validate 콜백을 사용합니다. 누락된 경우 모델에 기본값 설정



    Ruby on Rails에서 before_validation 를 사용하여 모델의 속성에 대한 기본값을 설정할 수 있습니다.

    이는 모델에 항상 유효한 속성이 있는지 확인하는 좋은 방법이며 매우 간단합니다.

    class User < ApplicationRecord
      before_validation :set_defaults
    
      private
    
      def set_defaults
        name = "First Last" if name.blank?
      end
    end
    


    그리고 그게 다야!

    다음 사항을 언급할 가치가 있습니다.


  • ActiveRecord 계약을 위반하는 원래 변경 사항을 기본값으로 재정의하지 마십시오.

  • def set_defaults
      name = "First Last"
    end
    


    (이 예상치 못한 동작은 개발자에게 혼란을 줄 것입니다.)
  • 확인 후 기본값을 설정하지 마십시오. 일관성을 지원하기 위해 유효성 검사 전에만 기본값을 추가하는 것을 선호합니다.

  • before_save :set_defaults
    
    private
    
    def set_defaults
      name = nil if name.blank?
    end
    


    (이렇게 하면 DB에 유효하지 않은 데이터가 추가되거나 런타임 오류가 발생합니다.)


    Paul Keen은 JetThoughts의 최고 기술 책임자입니다. 그를 팔로우하거나 GitHub .

    If you enjoyed this story, we recommend reading our latest tech stories and trending tech stories.

    좋은 웹페이지 즐겨찾기