ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [레일즈] Active Record 메소드
    Ruby on Rails 2021. 4. 23. 17:52

    이전 포스팅에서 레일즈 가이드에 따라 Active Record의 기본 개념을 살펴보았습니다.

     

    이번에는 액티브 레코드가 제공하는 메소드들을 알아보겠습니다.


    1. CRUD 메소드

    액티브 레코드는 기본적으로 테이블로부터 데이터를 쓰고 읽고 수정하고 삭제하는 CRUD 메소드를 자동으로 제공합니다.

     

    CREATE 메소드

    Create 메소드에는 new와 create 가 있습니다. 우선 new 는 빈 객체를 리턴하고, create 는 객체를 리턴하여 데이터베이스에 저장합니다.

     

    예를 들어, Post 라는 모델에 title 과 content 라는 속성이 있다고 가정하겠습니다.

     

    콘솔 창에 아래와 같이 new 를 활용해 코드를 작성하면 title 이 공지사항, content 가 블로그 공지사항입니다. 라는 데이터가 저장됩니다. new 는 빈 객체를 생성만 하기 때문에 save 를 사용해 데이터를 DB에 커밋해야 합니다.

    post = Post.new
    post.title = "공지사항"
    post.content = "블로그 공지사항입니다."
    post.save

    위 코드를 작성해서 post 를 생성한 후, Post.last 로 마지막으로 작성된 포스트를 호출해보니 콘솔 창에서 입력한 데이터들이 잘 들어가 있습니다.

     

    다음으로, create 를 사용해 post 를 생성해보겠습니다.

    post = Post.create(title: "공지사항2", content: "블로그 공지사항 2번입니다.")

    이렇게 create 를 사용해 데이터베이스에 새 post 를 작성해보았습니다.

     

    READ 메소드

    액티브 레코드는 데이터베이스 내의 데이터로 접근하기 위한 다수의 API를 제공하는데 레일즈 가이드에 나온 여러 메소드들을 살펴보겠습니다.

     

    all

    all 은 모든 객체 데이터를 컬렉션 형태로 보여줍니다. 아래 코드는 posts 를 Post.all 로 지정하고 posts 를 호출한 것으로 Post.all 로 불러온 것과 같습니다.

    posts = Post.all
    posts

     

    first

    first 는 첫번째 객체를 호출합니다.

    Post.first

    Post.first 로 첫번째 post 를 호출했더니 id:1 인 post가 결과로 나왔습니다!

     

    find 와 find_by

    find 를 통해 특정 id를 가진 객체를 불러올 수 있습니다. 형식은 모델명.find(id 값) 입니다. 아래는 id가 1, 7 인 post 를 각각 호출한 것입니다.

    Post.find(1)
    Post.find(7)

    find_by는 특정 속성값을 가진 객체를 불러옵니다. 형식은 모델명.find_by(속성: 값) 입니다.

    notice = Post.find_by(title:'공지사항')
    notice

    notice 에 제목이 공지사항인 post 를 찾아서 넣어주고 notice 를 호출해보겠습니다.

    이런 식으로 find 와 find_by 를 활용해 호출할 수 있습니다.

     

    Update 메소드

    객체를 검색해서 찾으면 해당 속성을 수정하여 데이터베이스에 저장할 수 있습니다.

    post = Post.find_by(title:'공지사항')
    post.title = '주요공지'
    post.save

     

    라고 입력하면 제목이 공지사항인 post 를 찾아 post 에 담고, post의 title을 '주요공지'로 수정한 후 변경하라는 의미입니다.

     

    위 명령어 입력 후, post 를 호출해보니 title 이 주요공지로 변경되었습니다!

     

    이 과정은 update 를 사용해 한번에 할 수 있습니다.

    post = Post.find_by(title:'주요공지')
    post.update(title:'전체공지')

    제목이 주요공지인 post 를 찾아 update 를 이용해 제목을 전체공지로 변경해보겠습니다.

     

    해시 형태를 이용해 여러 속성의 값을 변경할 수도 있습니다.

    post = Post.find_by(title:'전체공지')
    post.update(title:'공지사항', content:'티스토리 공지사항입니다.')

     

    DELETE 메소드

    또한, 객체를 찾아 삭제할 수도 있습니다.

    post = Post.find_by(title: '공지사항')
    post.destroy

    위 명령어로 제목이 공지사항인 post 를 삭제하고 다시 호출했더니 nil 이라고 나오네요. 제대로 삭제되었습니다.

     

    또한, 여러 레코드를 삭제하려면 destroy_by 나 destroy_all 메소드를 사용하면 됩니다.

    Post.destroy_by(title: '공지사항2')
    
    Post.destroy_all

    각각 위 명령어를 실행해보면,

     

    이렇게 특정 값에 따라 삭제할 수도 있고, 모든 레코드를 삭제할 수도 있습니다.

     


    2. 유효성 검증(Validation)

    액티브 레코드에서는 데이터가 DB에 저장되기 전에 모델을 확인해 유효성을 검증할 수 있습니다. 예를 들어, 패스워드나 이메일을 입력받을 때 특정 속성의 값이 채워져 있는지, 형식이 올바른 지 등을 검증할 수 있습니다.

     

    데이터를 저장할 때 검증해야 하므로 save 와 update 메소드 실행 시 이를 수행합니다. 유효성 검사에 실패하면 false를 반환하고 데이터베이스에 아무런 작업이 수행되지 않습니다.

     

    save!, update! 과 같이 뱅(!)을 사용하면 유효성 검사 실패 시 ActiveRecord :: RecordInvalid 에러를 발생시킵니다.

    class Post < ApplicationRecord
      validates :title, presence: true
    end

    라고 유효성 검증을 걸어놓고, 제목 없이 새 post 를 만들어보겠습니다.

     

    위처럼 post 의 제목의 값을 넣지 않고 content 의 값만 넣고 post.save 했을 때 false 가 나오고 저장이 되지 않습니다.

     

    유효성 검사에 대한 더 자세한 내용은 아래 링크를 참고하시기 바랍니다.

    railsguides.kr/active_record_validations.html


    레일즈 가이드에 나온 다양한 액티브 레코드 쿼리 인터페이스입니다.

    railsguides.kr/active_record_querying.html

     

    Active Record Query Interface — Ruby on Rails Guides

    Active Record Query InterfaceThis guide covers different ways to retrieve data from the database using Active Record.After reading this guide, you will know: How to find records using a variety of methods and conditions. How to specify the order, retrieved

    railsguides.kr

    쿼리(Query)는 사전적으로 문의, 질문이라는 뜻으로 데이터베이스에 정보를 요청하는 것을 의미합니다.


     

Designed by Tistory.