티스토리 뷰
해당 글은 https://blog.naver.com/kbs4674/221420285631 로 부터 게시글이 이전되었습니다.
루비온 레일즈에서 다루는 여러가지 메소드를 소개하고자 합니다.
위 테이블의 자료를 기반으로 한번 여러 메소드를 알아보겠습니다.
1. where VS find_by
1) where : 조건에 맞는 데이터에 대해 여러 개의 데이터 결과가 출력됩니다.
# Model.where(attribute: value)
Post.where(title: "서윤 연구소")
2) find_by : 조건에 맞는 데이터에 대해 한 개의 데이터 결과가 출력됩니다.
출력되는 한 개의 데이터는 제일 처음에 쓰여진 데이터입니다.
번외 여기서 where에 대해서 좀 더 깊게 짚어보자면, 아까와는 조금 다르게
# Model.where(attribute: value)
Post.where(title: "건우")
위 방식을 통해 단어를 탐색하면 '주식회사 건우' 가 있음에도 불구하고 아까와는 다르게 검색결과가 안나옵니다.
단어를 포함한 데이터 탐색을 하고싶다면 다음과 같은 방식을 통해 검색을 하면 됩니다.
Post.where("title like ?", "%건우%")
2. empty VS nil
1) empty : empty는 뭔가 데이터가 string형으로 초기화 되어있지만, 아무런 내용도 없는 상태입니다.
@apple = ""
#=> true
@apple = "사과"
#=> false
@apple
#=> false
2) nil : NULL의 의미를 가졌으며, 초기화 조차도 되어있지 않습니다.
하지만 그렇다고 해서 empty 상태가 곧 nil 상태는 아닙니다.
@apple
#=> true
@apple = ""
#=> false
@apple = "사과"
#=> false
3. empty VS present
1) empty : 이 전의 empty는 Ruby문법 관점으로 봤다면, 이번에는 Rails 관점으로 봐야합니다.
레일즈 관점으로 바라보면 테이블 내 데이터가 있는지 확인합니다.
<% if Post.all.empty? %>
<h2 class="text-center" style="margin-top: 30px;">게시글이 없습니다.</h2>
<% else %>
<% Post.all.each do |x| %>
<%= x.title %>
<hr/>
<% end %>
<% end %>
2) present : 한 데이터 row의 Attribute 내 내용이 존재하는지 판단합니다.
<% Post.all.each do |x| %>
<%= x.title %>
<% if x.content.present? %>
| <%= x.content %>
<% else %>
<span style="color: red">내용이 없습니다.</span>
<% end %>
<hr/>
<% end %>
4. update VS update_all
1) update : 조건에 맞는 메소드에 대해 Attribute 내용을 수정합니다.
2) update_all : 조건에 맞는 데이터 전체를 한번에 수정합니다.
읽을거리 비교분석 : SQL 작업 속도
여기서부턴
위 자료를 기반으로 메소드를 살펴보겠습니다.
5. all
<%= Post.all.each do |x| %>
<%= x.title %>
<hr/>
<% end %>
누구나 개발을 하면서 제일 많이 쓰는 메소드일 겁니다.
모든 테이블 내 데이터를 보여주는 메소드 입니다.
6. first(n)
1) ruby
0번 째 부터 n개 만큼의 배열을 출력합니다.
@array = [1,2,3,4,5]
@array.first(3)
# => [1, 2, 3]
2) rails
제가 개발을 하면서 제일 많이 쓴 메소드입니다. 첫 구절 DB부터 몇 번 째 까지 보여줄 것인지 정합니다.
<%= Post.first(3).each do |x| %>
<%= x.title %>
<hr/>
<% end %>
7. last(n)
1) ruby
끝 배열 부터 n개 만큼의 배열을 출력합니다.
@array = [1,2,3,4,5]
@array.last(3)
# => [5, 4, 3]
2) rails
마지막 구절 DB부터 몇 번 째 까지 보여줄 것인지 정하는 메소드 입니다.
<%= Post.last(3).each do |x| %>
<%= x.title %>
<hr/>
<% end %>
8. drop(n)
1) ruby
@array = [1,2,3,4,5]
@array.drop(2)
# => [3, 4, 5]
2) rails
앞의 몇 개의 DB를 생략하고 보여줄 것인지 정하는 메소드 입니다.
<%= Post.all.drop(9).each do |x| %>
<%= x.title %>
<hr/>
<% end %>
9. uniq
## app/views/...
<% Post.all.uniq.each do |x| %>
<%= x.title %>
<% end %>
중복적으로 보여지는 글(게시글 id값이 동일)에 대해선 표시되진 않습니다.
(과거에 http://www.damda.info/ 사이트를 개발하면서 데이터 중복 현상이 한번 발생했었음.)
10. time_zone
## config/application.rb
config.time_zone = 'Seoul' # Time Zone 국가 지정
## app/views/...
<% Post.all.each do |x| %>
<%= x.title %>
<%= x.created_at.time_zone %>
<hr/>
<% end %>
Rails 프로젝트의 현재시간 기준 국가를 보여줍니다.
기본 국가는 UTC+00:00 인 영국 표준시이며, 따로 국가를 설정하려면 config/application.yml 에서 다음과 같이 설정해줘야 합니다.
해당 메소드를 쓸 땐 보통 다른 메소드랑 같이 씁니다.
created_at.time_zone.now.strftime('%Y-%m-%d %H:%M')
# => 2019-11-06 03:50
11. in_time_zone("반도 혹은 대륙/수도")
<% Post.all.each do |x| %>
<%= x.title %>
<%= x.created_at.in_time_zone("America/Chicago") %>
<hr/>
<% end %>
Rails 프로젝트의 현재시간 기준 국가를 보여줍니다.
time_zone과는 다르게 메소드 내에서 국가 설정을 합니다.
12. strftime('%Y-%m-%d %H:%M')
<% Post.all.each do |x| %>
<%= x.title %>
<%= x.created_at.strftime('%Y-%m-%d %H:%M') %>
<hr/>
<% end %>
년/월/일/시/분 을 어떻게 보여줄건지 형식을 정합니다.
13. now
주로 Time 타입과 같이 쓰이며, 현재 시간을 알려줍니다.
14. to_i
Strng(문자) 등 다른 형식을 문자형 데이터 타입으로 변환하기 위해 쓰입니다.
15. to_s
프로그래밍 코드 혹은 숫자형 데이터 타입을 String(문자) 데이터 타입으로 변환하기 위해 쓰입니다.
16. to_a
Array 타입으로 변환합니다.
17. hash
아직까지 개인적으로 쓰인 일은 없었는데, 숫자나 문자를 hash값으로 변환시켜줍니다.
(하지만 간단히 hash 함수 하나만으로 보안적으로 쓰기에는 좋은 선택은 아닐거에요.)
-
읽을 거리
1. 알아두면 도움이 되는 55가지 루비기법 [클릭]
'프로그래밍 공부 > Ruby on Rails : 이론' 카테고리의 다른 글
Ruby on Rails : SQL N+1 맛보기 (4) | 2019.11.06 |
---|---|
Ruby on Rails : SQL Performance의 고민 (서론) (0) | 2019.11.06 |
Ruby on Rails : 비동기(Ajax) 이벤트 구현 (4) | 2019.11.03 |
Ruby on Rails : 댓글 구현 (1:M 개념 익히기) (0) | 2019.11.03 |
Ruby on Rails : 코드의 분산 - render의 개념! (0) | 2019.11.02 |