ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Ruby On Rails 맛보기 - model
    💻 프로그래밍/Ruby On Rails 2021. 3. 14. 20:13

    안녕하세요! JAY입니다. 지난 포스팅에 서는 Rails의 Controller. View에 대해 간단히 알아봤습니다.

    이번 포스팅에서는 Model에 대해서 알아보겠습니다.

     

    잠깐 스포하자면...Model이 가장 복잡한 것 같습니다. 특히 Django 개발자에게는 말이죠... 이유는 아래에서 설명해보겠습니다.

     

     

    1. Model 선언 👨‍💻


    Model 선언에 앞서 Railsdatabase config에 대해 살펴보겠습니다.

    config/database.yml

    railsconfig/database.yml에 DB에 대한 정의를 할 수 있습니다. 기본적으로 생성된 걸 보면 환경에 맞게 DB 세팅을 다르게 해 놨네요. 일단 기본적으로 정의된 sqlite3로 사용해보겠습니다.


    Rails에서 model을 만들때는 아래 명령어로 만들 수 있습니다.

    rails g model [모델명] [속성들]

    post 모델이 생성
    models와 db/migrate에 파일이 생성

    이미지를 보시다시피 migration 파일과, model 파일이 생성되었습니다. 
    모델의 필드를 추가할때 명령어로 생성할 수 도 있고, 직접 마이그레이션 파일을 수정해도 됩니다. 저는 명령어가 익숙하지 않아 좀 더 쉽게 migration 파일을 직접 수정하고 migrate를 해봤습니다.

     

    migration에 대한 상세 내용은 여기서 확인 하시길 바랍니다. (상세한 내용은 따로 포스팅을 만들겠습니다.)

    마이그레이션 파일을 직접 수정

    사실 여기서부터 상당히 불편함을 느꼈습니다. Django의 경우 models.py에 모델을 정의하고 makemigraion 하면 migration 파일이 생성돼서 그걸 그냥 migrate 하면 되는데, Rails는 뭔가 더 복잡하다고 느껴졌습니다.

     

    뭐, 어쨌든 이어서 진행해보겠습니다. 이제 migration 파일이 생성됬으므로 migrate를 진행해서 실제 DB에 적용시켜보겠습니다.

    rake db:migrate

    마이그레이션이 적용된 모습

    이제 간단하게 데이터를 생성하고 생성된 데이터를 화면에 뿌려보겠습니다.

    이전 포스팅에 이어서 작성했습니다. 화면이 새로고침 될때마다 새로운 Post를 생성하고, 모든 Post 데이터를 화면에 뿌려보겠습니다.

    (실제로 이렇게 개발하지는 않겠지만, 단순 테스트 코드라고 봐주세요)

    출력된 Post 데이터들

    앞에 몇개의 데이터는 위 로직 적용 전에 테스트로 만들었던 데이터들인데 같이 잘 노출되네요.

     

     

    2. 근데 models.rb는 뭐...하는거지? 🤔


    Rails에서 models.rb 파일들은 그냥 비어있습니다. Django의 경우 models.py에서 테이블을 정의하는데 말이죠. 그래서 알아보니 models.rb 파일에서는 모델들 간의 relations을 정의할 때 사용합니다. 

     

     

    1:N, 1:1, N:N 등의 관계를 말이죠. 간단하게 User 모델을 만들고 외래 키로 Post 모델에 연결해 보겠습니다.

    rails g migration add_user_id_to_posts user:references

    위 마이그레이션 명령어로 user_idpost 모델에 필드로 추가했습니다. 다시 migrate를 해줍니다.

    Migrate 오류

    migrate 하려고 하니 에러가 나네요. 확인해보니 user_id not null이라서 오류가 납니다. 기존에 테이블에 있던 데이터들은  user가 연결 안 되었기 때문인 것 같네요.

    migration파일에서 null: ture로 설정 후 다시 migrate하니 잘 됩니다.

    이제 user를 생성하고, post에 연결한 뒤, 웹에서 user_id를 출력해보겠습니다.

    에러가 난다

    곰곰이 생각해보니 models/post.rb 에 user 모델을 연결해주지 않았습니다.

    user모델과 1:1 연결
    RailsGuides 에 설명된 belongs_to 

    belongs_to는 1:1 관계를 정의할 때 사용합니다. (자세한 내용)

    실행결과

    웹페이지를 새로고침 하면, 원하는 결과가 잘 나온 걸 볼 수 있습니다. User ID가 없는 모델은 Null인 경우입니다.

     

    3. 마치며 👋


    일단 model만 봐도 스터디할 내용이 많은 것 같습니다. 오늘은 짧고 간단하게 어떻게 사용되는지 정도만 알아봤습니다.

     

    개인적으로, raillsmodel보다는 djangomodelmigration파일 생성도 그렇고, model을 정의하는 것도 훨씬 쉽고 편한 것 같습니다. 중간에 필드 추가하거나 수정하는 경우에도 말이죠. 처음 접한 rails의 model은 조금 헷갈리는 부분이 많았던 것 같습니다.

     

    다음에는 좀 더 세부적인 부분에 대해 스터디해보겠습니다.

    그럼 즐거운 코딩 하세요!

    댓글

운동하는 개발자 JAY-JI