사용하지 않고 사용하지 않습니까? Rails에서 Temporary Table을 사용하는 방법
소개
DMM WEBCAMP Advent Calendar 2020 12 일째 담당을하겠습니다!
DMM WEBCAMP 멘토의 Sawa입니다!
앱 개발에서 데이터베이스에서 여러 테이블을 사용할 때
「이 페이지만 1개의 테이블에 정리하고 싶어...」
그런 생각을 한 적이 없습니까?
그래서 이번에는
사용하지 않고 사용하지 않지만 알아두면 손해가 없습니다.
"Temporary Table"
에 대해 정리하겠습니다
Temporary Table이란?
Rails를 사용한 웹 앱에서는 일반적으로 데이터베이스(SQLite, MySQL 등)에 데이터를 저장합니다.
기본적으로는 미리 테이블을 작성해 두고, 거기에 데이터를 신규 작성, 갱신해 갑니다.
반면에 데이터베이스에는 일시적으로 테이블을 만들고 필요한 경우에만 테이블을 사용할 수있는 기능이 있습니다.
그 기능이야말로 이번에 소개하는 「Temporary Table」입니다!
Rails에서 사용해보기
Rails에서 데이터베이스를 사용할 때 ActiveRecord를 사용합니다.
ActiveRecord에 대해서는 여기의 기사가 알기 쉬웠기 때문에 참고로 되면 좋을까 생각합니다.
또한 Rails5 계에서는
ActiveRecord::Base
를 계승한 ApplicationRecord
를 사용할 수 있기 때문에 본 기사에서는 ApplicationRecord
를 사용합니다.ApplicationRecord를 사용하여 Temporary Table 만들기
이번에는 이벤트 테이블을 Temporary Table로 작성하기로 결정합니다.
컬럼으로서 title, body 컬럼을 준비해 보았습니다.
temporary_tables_controller.rb
ApplicationRecord.connection.create_table('events', temporary: true, force: true) do |t|
t.string :title
t.text :body
t.timestamps
end
첫 번째 줄에서는 ApplicationRecord를 호출하고 데이터베이스에 연결하여 테이블을 만듭니다.
SQLite, MySQL에서는
temporary: true
로하는 것만으로 temporary table를 만들 수 있습니다 (MySQL의 경우 기본적으로 temporary table의 사용 권한이 없습니다. MySQL에 로그인하고 권한 변경이 필요합니다.)
옵션으로
force: true
를 사용하고 있습니다만, 이것은 기존의 테이블이 있을 때에 한 번 삭제를 해 재작성하는 것을 의미하고 있으므로 잊지 마세요.다음에 작성한 Temporary Table을 ApplicationRecored에 연결해 갑니다.
(이미지로는 모델을 만드는 느낌입니다)
temporary_tables_controller.rb
Object.const_set('Event', Class.new(ApplicationRecord))
Object.const_set은 동적으로 클래스를 생성할 수 있는 메서드이며 ApplicationRecord를 상속한 Event 클래스를 만듭니다.
이것은
terminal
$ rails g model Event
event.rb
class Event < ApplicationRecord
end
동적으로 처리하는 것과 비슷한 의미를 갖습니다.
이상의 공정으로 Temporary Table를 Rails로 사용할 수 있게 됩니다!
실제로 사용해보기
이제 Rails에서 Temporary Table을 사용해 봅시다!
이번에는 다음과 같은 코드를 짜 보았습니다.
Temporary Table을 만들어 거기에 새로운 데이터를 넣습니다.
실행 환경 : Rails 5.2, SQLite3
temporary_tables_controller.rb
def event
ApplicationRecord.connection.create_table('events', temporary: true, force: true) do |t|
t.string :title
t.text :body
t.timestamps
end
Object.const_set('Event', Class.new(ApplicationRecord))
@events = Event.create([
{title: "hoge-1", body: "fuga-1"},
{title: "hoge-2", body: "fuga-2"},
{title: "hoge-3", body: "fuga-3"}
])
end
event.html.erb
<% @events.each do |event| %>
<%= event.title %>
<%= event.body %><br>
<% end %>
동작 확인을 해 보면 다음과 같이 표시되었습니다. 제대로 Temporary Table이 만들어져 데이터가 저장되어 있습니다!
터미널:
화면 표시:
사이고에게
오늘은 Temporary Table에 대해 정리해 보았습니다! 어땠습니까?
이전 simple calendar을 사용하여 앱을 개발했으며 캘린더에 일정을 넣기 위해 모델을 하나로 만들어야했습니다 ...
그 때에 이 Tempolary Table가 대활약을 한 것입니다!
알아두면 어딘가에서 도움이 될 수 있습니다
Reference
이 문제에 관하여(사용하지 않고 사용하지 않습니까? Rails에서 Temporary Table을 사용하는 방법), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/SawaShuya/items/1fed165578d30a5ef1f0텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)