본문 바로가기

Ruby On Rails/Model(ORM)

Model 정리

1. model&.other_model 

  • & : return empty string if don’t have any value there 
  • 만약 비어있는 값일 때, 에러를 내지 않는다.
  • Ex) wholesale_store&.ssm_store_number

2. Model.where(id: id).first

  • 리턴 값이 list이다.
  • 그러므로 상대 쪽에 있는 유일한 값(PK)을 가져오고 싶을 땐 first를 써줘야 한다.
  • 만약 배열로 받는 것이 싫다면 find를 써서 하나만 받아오는 방법도 있다.

3. Model.find(id: id)

  • return variable
  • 즉, list가 아닌 단일 값 리턴이다.

4. model.where(other model: {col: data})

5. AASM으로 status(상태) 관리 기법

  • AASM으로 상태 관리하는 것은 table에 데이터를 넘길 때는 string으로 가능하다.
  • 하지만 직접 값을 비교할 때에는 string으로 안되니 아래 글을 읽어볼 것.
  • https://negabaro.github.io/archive/aasm

6. dtoClass 가 없다는 의미는..

  • 하나의 @variable 인스턴스 변수에 db에서 가져온 값들을 중첩해서 넣고, 그 객체를 뷰에서 작업할 수 있도록 리턴해준다.
  • 그렇다면 배열 접근이 아닌 객체 접근이 되어서 모델 안에 있는 값들을 직접 접근할 수 있다. model.id

7. 꼭 배열로 접근해야 한다면.. Json format으로 맞추어 리턴해줄 것.

  • 여러 객체들의 혼합 혹은 합계 등을 한꺼번에 리턴할 때,

list = []

list.push(

id: model.id,

name: model.name

)

  • 이렇게 정의해서 json형태로 값을 리턴 하고 view에서 json 형태로 바로 받을 수 있도록 해준다.

8. 특정 값을 가지고 리스트를 리턴하고 싶을 때,

9. a = model.group(:id).sum(:price) 경우, 값 접근법.

a.each do |key, value| 형태로 접근.

key = id

value = sum_price

  • 이때, 다른 테이블의 값에 접근할 때에는 일반적인 방법으론 안된다.

ex) group.(:id).sum(ssmOrderGoodsInfo: :price) 

에러 난다.

  • solution

group(:id).sum(‘ssmOrderGoodsInfo.price’)

  • 이렇게 스트링으로 묶어서 검색을 해주면 내가 원하는 값을 받을 수 있다.*

10. 데이터 처리를 최소한의 칼럼들만 조건을 넣어서 조회를 해준다면, 엄청나게  많은 시간을 줄일 수 있다. 

  • 기존 코드 -> for문으로 값들을 가져와서 하나하나 값을 처리 -> 시간이 엄청나게 소모됨.
  • 리팩터링 한 코드 -> sql로 조건을 줄 수 있는 만큼 최대한 줘서 가져옴. -> 시간이 엄청나게 감소됨.
  • 왜냐하면 n+1문제가 발생하지 않으므로

11. .where 이나 .group method 는..

  • return an instance of ActiveRecord::Relation

12. model table 생성 시

  • created_at
    • model.create 시 자동으로 날짜 생성해준다.
    • 그러므로, set_date는 꼭 필요한 경우만 만들어야 하는 메서드이다.
  • 테이블 이름 뒤에 복수로 만들 것.
  • self.table_name = ‘name’
  • self.primary_key = ‘id’
  • 이 두 가지는 생략 가능.

14. attr_accessor in model 사용방법

  • 원리는.. 기존의 model 객체에 내가 원하는 값을 넣어줘서 그 값을 accessor로 받는다.
  • ex) attr_accessor :admin_id
  • staff_registration = @current_admin.id
  • 이렇게 넣어주고 accessor 받으면 값을 사용할 있다.

'Ruby On Rails > Model(ORM)' 카테고리의 다른 글

find_in_batches vs each_slice  (0) 2021.12.25
batches를 사용하는 이유  (0) 2021.12.25
preload vs includes vs eager_load vs joins  (0) 2021.12.24