4월, 2020의 게시물 표시

루비 온 레일즈에서 최신 로그들을 가지고 오고 싶다면? 부모 모델과 연결된 자식 모델의 마지막 행들의 값을 가지고 오고 싶다면? (How to get recently log or last row of child model Ruby on Rails )

이미지
## 루비 온 레일즈에서 최신 로그들을 가지고 오고 싶다면? 부모 모델과 연결된 자식 모델의 마지막 행들의 값을 가지고 오고 싶다면? (How to get recently log or last row of child model Ruby on Rails ) 최근 루비 온 레일즈 프로젝트에서 부모 모델의 각 id에 연결 된 자식 모델의 행 중 맨 마지막 행의 특정 컬럼값이 몇 개인지 세야 했다. 예를 들자면 아래 이미지와 같은 느낌이다. 이미 SQL을 그대로 삽입해서 구현한 코드는 있었다. 코드는 아래와 같다. ```ruby parents = ParentModel.where("created_at > ?", date_value) parents.where("(SELECT event FROM child_model WHERE parent_model_id = parent_models.id ORDER BY created_at DESC LIMIT 1) = ?", ChildModel.events[:event_name]).count ``` 그러나 Rails way, DB 호환성 등을 위해 ActiveRecord를 사용한 코드로 바꿔야했다. 바꾼 코드는 다음과 같다. ```ruby parents = ParentModel.where("created_at > ?", data_value) #큰 의미 없음 ChildModel.where(parent: parents, id: ChildModel.group(:parent_model_id).maximum(:id).values).group(:event).count["event_name"] ``` ActiveRecord를 사용한 코드라 바꿨고, 걸리는 시간도 조금 줄었다. 코드 설명을 하자면 ChildModel에서 각 parents를 가지고 있으면서 각 ChildModel의 parent 모델의 id 값중 가장 큰 값(최근에 저장된 child mod...

ssh 접속 시 WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED! 문제

## ssh 접속 시 WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED! 문제 평소 ssh 로 잘 접속되었는데 갑자기 아래와 같은 메시지가 나오면서 접속되지 않는다면 ```bash @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @ WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED! @ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY! Someone could be eavesdropping on you right now (man-in-the-middle attack)! It is also possible that a host key has just been changed. The fingerprint for the ECDSA key sent by the remote host is ... ``` 아래와 같이 명령어를 적고 다시 접속한다. ```bash ssh-keygen -R IP 주소 ```

루비 온 레일즈 eval (eval in Ruby on Rails)

## 루비 온 레일즈 eval (eval in Ruby on Rails) #### 아래와 같이 json 형식으로 값을 뽑아내야하는데 pluck을 사용하니 그 아래와 같이 나왔다. ```ruby "[{\"x\":0,\"y\":-4,\"z\":2},{\"x\":16,\"y\":-4,\"z\":4},{\"x\":16,\"y\":4,\"z\":8},{\"x\":0,\"y\":4,\"z\":5},{\"x\":0,\"y\":0,\"z\":2}]" ``` pluck 으로 뽑아낸 결과 ```ruby ["{:x=>0, :y=>-4, :z=>2}", "{:x=>16, :y=>-4, :z=>4}", "{:x=>16, :y=>4, :z=>8}", "{:x=>0, :y=>4, :z=>5}", "{:x=>0, :y=>0, :z=>2}"] ``` 그래서 사용한 방법은 map 과 eval을 이용하는 것이다. 모델에서 뽑아낸 행들.map{|m| eval(m.모델의 컬럼네임) if 모델의 컬럼네임.present?}

루비 온 레일즈 pluck 메소드 (how to use pluck, eval method in Ruby on Rails)

## pluck 메소드 간단 소개 #### 예를 들어 모든 유저의 이름을 하나의 배열에 담을 때 어떻게 해야 효율적일까? 와 같은 문제를 해결 할 때 유용하게 사용할 수 있는 메소드가 pluck 이다. 물론 아래와 같이 반복문을 사용할 수도 있다. ```ruby user = [] User.all.each do |u| user