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})
- https://stackoverflow.com/questions/31505408/using-a-where-clause-with-join-clause-in-rails-activerecord
- another model에서 값을 받아오는 방법
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. 특정 값을 가지고 리스트를 리턴하고 싶을 때,
- model.map()
- retail_store_list.map(&:id)
- https://guides.rubyonrails.org/active_record_querying.html
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 |