Ruby On Rails (25) 썸네일형 리스트형 find_in_batches vs each_slice 모든 ids값을 가지고 오면 쿼리 오류가 발생할 수 있다. 그 이유에 대해서는 https://dexlee.tistory.com/109?category=1031550 여기에 에러 메시지와 함께 설명을 해놓았다. 그래서 이런 경우, 배치 함수를 사용해서 데이터를 가져와야 속도도 빠르고 안전하다. 1. find_in_batches(), in_batches() 두 함수의 약간의 차이점에 대해서는 다루지 않고 공통점에 대해서 다루고, 문제점을 정의하겠다. 이 두 함수는 실무에서 사용이 제한적이어야만 한다. 왜냐하면 모든 ids값을 가지고 limit을 사용해 데이터를 자른다. 1) 예시 BATCH_SIZE = 4 ids = (1..10).to_a sheets = [] Sheet.where(id: ids).find_.. batches를 사용하는 이유 1. 큰 크기의 ids 큰 크기의 ids(성능에 따라 다르겠지만 대략 100만개 이상)를 넘기면 쿼리를 처리하는 과정에서 오류가 발생할 수 있다. ActiveRecord::StatementInvalid: Mysql2::Error::ConnectionError: MySQL server has gone away from /Users/xxx/.rbenv/versions/2.6.6/lib/ruby/gems/2.6.0/gems/mysql2-0.5.3/lib/mysql2/client.rb:131:in `_query' Caused by Mysql2::Error::ConnectionError: MySQL server has gone away from /Users/xxx/.rbenv/versions/2.6.6/lib/r.. preload vs includes vs eager_load vs joins 이 4가지의 차이점을 살펴보겠다. 1. preload 연관관계에 있는 테이블을 미리 로드해준다. includes와 default는 같지만 약간의 차이가 있다. 연관관계 로드할 때, 항상 query를 분리해서 요청한다. store = '도매' wholesale_stores = WholesaleStore.preload(store_number: [building_floor: :building]).where('store LIKE ?', "%#{store}%") 이렇게 호출하면 쿼리가. WholesaleStore Load (44.5ms) SELECT `wholesaleStore`.* FROM `wholesaleStore` WHERE (store LIKE '%도매%') StoreNumber Load (30.6ms).. 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}) https://stackoverflo.. 1년간 루비와 레일즈로 개발하며.. 루비와 레일즈를 다루는 회사에 들어가기 전에 내가 다루었던 기술이 자바와 스프링으로 웹 개발을 진행했어서 한 번도 다루어보지 않은 루비와 레일즈로 개발을 잘할 수 있을지 걱정이 되었었다. 그렇게 회사에 입사 후 루비와 레일즈를 공부하게 되었는데.. 생각보다 개념들이 단순하고 직관적이어서 막 어렵진 않았다. 물론 깊게 들어가면 어렵겠지만, 레일즈 철학이 빠르게 개발을 하는 것이고, 실제 이 수준으로 개발을 진행하는 건 다른 프레임워크인 spring에 비해 쉬운 편이라고 생각한다. 그리고 스프링과 다르게 레일즈는 어떤 규약이 있어서 특정 기준에 맞추어 작성하면 레일즈 프레임워크가 알아서 처리해준다. 예를 들어, new와 create 이란 이름을 컨트롤러에서 사용하면, new는 등록할 수 있는 폼을 제공해주고.. Controller 예외처리 1. raise, rescue 처리 잘못된 값이 들어왔을 때, raise로 예외를 하나하나 처리해주고 그 메시지를 rescue로 넘겨줘서 처리하는 방식이다. def delete_cash id = params[:id].to_i raise ApiExceptions::CustomException.new(:not_found, I18n.t('common.messages.cash.not_found')) if id.blank? CashTable.destroy(id) rescue => e render_error e.class == ApiExceptions::CustomException ? e.status : :not_acceptable, e.class == ApiExceptions::CustomException ? e.. Controller 특징 Rails는 query 문자열(get - url?string), post data의 포맷을 구분하지 않음 둘 다 컨트롤러의 매개 변수 해시에서 사용가능. params[:value] multi format을 사용하면 한 가지 핵심을 기억해야 한다. 하나의 request에는 하나의 response만 받을 수 있다.** html 요청을 하면 html로 응답을 하고, json으로 요청을 하면, json으로 응답을 한다. js로(ajax 등) 요청을 하면, js로 응답을 한다. controller에서 @data로 객체를 만든다면, 이 객체는 이 컨트롤러 안에서 인스턴스 변수가 된다. 즉, 이 컨트롤러 안에서 자유롭게 사용 가능하다. json만 보내고 싶은데 layout이 존재하는 경우 render layout: .. Configuration 1. 로케일 메시지 처리 config/application.rb config.i18n.default_locale = :ko config.i18n.available_locales = [:en, :ko] config/locales/ 여기 있는 ko.yml 파일에 에러, enum, status, 등의 메세지를 계층 구조로 직접 입력한다. 언어팩이다. 2. 개발 환경설정 config/environments/ 3. config/manifest/ manifest.json 웹앱 매니페스트란 앱에 대한 정보를 가지고 있는 json. 배경색, 앱 이름, 홈스크린 화면에 추가할 아이콘 등의 정보를 담고있음 4. gemfile.lock 이 파일 안에 rake 버전 등. 여러 가지 파일들이 정의되어있다. 이 파일은 자동 생성.. 이전 1 2 3 4 다음