[rails] 모델 기본

2016. 6. 27. 22:01프로그래밍/Ruby on Rails

728x90
728x90

O/R 맵퍼

관계형 데이터베이스와 객체 지향 언어의 객체 사이의 징검다리를 놓아주는 라이브러리


관계 불일치(impedance mismatch)

애플리케이션 객체 모델과 데이터베이트 관계형 모델의 구조가 차이나는 것을 의미


O/R 맵퍼는 이러한 잘못된 매칭을 제거하기 위한 툴.

모델 클래스의 인스턴스는 레코드 한 개를 나타내는 객체로

객체의 속성은 테이블의 필드로 그대로 갖게 된다.


ex) books 테이블 > 대응하는 모델 Book 클래스

books 테이블 내부의 필드 > Book 클래스도 isbn, title 등의 속성을 가짐


데이터베이스 연결 설정

database.yml의 YAML 형식으로 작성한다.

YAML은 Ain't Markup Language로

HTML 이나 XML과 같은 마크업 랭기쥐가 아니라 들여쓰기로 구조를 표현한다.

탭을 사용하면 안된다. 무조건 공백.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
# SQLite version 3.x
#   gem install sqlite3
#
#   Ensure the SQLite 3 gem is defined in your Gemfile
#   gem 'sqlite3'
#
default: &default
  adapter: sqlite3
  pool: 5
  timeout: 5000
 
development:
  <<: *default
  database: db/development.sqlite3
 
# Warning: The database defined as "test" will be erased and
# re-generated from your development database when you run "rake".
# Do not set this db to the same as development or production.
test:
  <<: *default
  database: db/test.sqlite3
 
production:
  <<: *default
  database: db/production.sqlite3
cs


development : 개발 환경

test : 테스트 환경

production : 배포 환경


database.yml에 사용하는 주요 매개변수

adapter : 접속할 데이터베이스 종류(sqlite3, mysql2 등)

database : 데이터베이스 이름

hots : 호스트 이름 또는 아이피

port : 포트 번호

pool : 확보할 접속 풀

timeout : 접속 타임아웃 시간

encoding : 사용할 문자 코드

username : 사용자 이름

password : 비밀번호

socket : 소캣


모델 클래스 생성

1
rails generate model name field:type [..] [options]
cs


옵션

--indexes : 외부 키를 나타내는 필드에 인덱스를 추가할지 여부

-o : --orm=NAME : 사용할 O/R 맵퍼

--migration : 마이그레이션 파일 생성 여부

--timestamps : 타임스탬프

-t, --test-framework=NAME : 사용할 테스트 프레임워크

--fixture : 픽스처 생성 여부



생성해보기


모델 클래스와 마이그레이션 파일이 만들어지는 것을 확인할 수 있다.


모델 Association 이름 규칙(이거 개 중요!)

모델 클래스 : 첫 글자를 대문자, 단수형 Book

모델 클래스의 파일 이름 : 첫 글자를 소문자, 단수형 book.rb

테이블 : 첫 글자를 소문자, 복수형 books

테스트 스크립트 : xxxxx_test.rb(첫 글자는 소문자로 하고 단수형으로 사용) book_test.rb


마이그레이션 파일(xxxx_create_books.rb)


vi로 들어가면 이런 꼬라지.


1
rake db:migrate
cs


이 명령을 때리면 sqlite에 테이블이 생성된다.(회사에서 지겹게 하고 있는 것)


데이터 추출 기본

컨트롤러에 list 액션 추가


1
2
3
4
5
6
7
8
9
10
11
12
13
class HelloController < ApplicationController
#  def index
#    render text: 'Hello World..!'
#  end
 
  def view
    @msg = 'Hello View World!!!!!'
  end
 
  def list
    @books = Book.all
  end
end
cs


뷰에 list.html.erb 추가 해주기


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<table border="1">
  <tr>
    <th>ISBN CODE</th>
    <th>name</th>
    <th>price</th>
    <th>publish</th>
    <th>published</th>
  </tr>
 
<% @books.each do |book| %>
  <tr>
    <td><%= book.isbn %></td>
    <td><%= book.title %></td>
    <td><%= book.price %></td>
    <td><%= book.publish %></td>
    <td><%= book.published %></td>
    <td><%= book.cd %></td>
  </tr>
<% end %>
</table>
cs



728x90
반응형