잊지 않겠습니다.

ActiveRecord - Rails application과 Database 간의 연동을 담당.

   

ActiveRecord
  • Record 객체를 통해서 Database Table을 조작
  • 각각의 Record는 Database의 각각의 row와 대응 : create, read, update, delete 가능

  

 차이점  장점

 Rails는 Database table에 정의된 Column을 기반으로 하여 속성을 자동으로 추가한다.

Rails는 내부 언어로 관계 관리와 검증을 한다.

Rails 작명 규약은 DB의 특수한 필드를 자동으로 찾아낸다.

개발자는 속성을 지정할 때, DB만을 추가하면 된다. 

Rails 개발자는 관계와 모델 기반의 검증을 코드 생성없이 프레임워크 자체적으로 할 수 있도록 선언할 수 있다.

Rails 개발자는 주키나 후보키를 따로 설정할 필요가 없다.

   

OR Mappting
  • Datatabe Table과 object를 각각 생성.
  • Java Framework 에서 주로 사용되는 방법
  • 여러 종류의 Database Schema 지원
  • setting 파일의 복잡
  • 코드의 중복 가능

   

ActiveRecord on Rails
  • Setting대신 규약 : 규약에 의하여 Database Schema를 가져오는 것이 가능하다.
  • MetaProgramming
  • Mapping 언어 : Ruby를 이용하여 또 다른 언어를 만든다.

  

Rails 에서의 Active Record Model object 생성
  1. config/databasel.yml 수정
  2. Model 객체의 생성 (ruby script/generate model Photo)
  3. migration의 수정 - DB의 column의 설정(ruby에서 db의 table의 생성 및 수정 가능)
  4. migration의 실행 (rake db:migrate)

class CreatePhotos < ActiveRecord::Migration
  def self.up #DB Table의 생성
    create_table :photos do |photo|
      photo.column "filename", :string
    end
  end

  def self.down #DB Table의 삭제
    drop_table :photos
  end
end

   

Active Record Class
Class와 Table 이름
  • Active Record Class의 영문 복수형을 Database table 이름으로 간주하여 Table을 찾고, 만들어준다.
식별자
  • "id" 라는 column을 자동으로 생성하고 primary key로 만들어준다.
  • "id"는 정수형이며, auto-increase 속성을 갖는다.
외래키
  • "<classname>_id" 형태로 지어지게 된다.
표기 방법
  • Active Record class는 모두 Camel casing에 따라 지어지게 된다.
  • 공백은 모두 '_'로 채워지게 된다.

  

Rails Console

Database와 Model간에 유기적인 결합을 만들어준다.

  • DB에 연결
  • app/model에 있는 Active Record Class들을 불러온다.
  • Database와 Model간에 DB 작업을 포함하여 유기적인 작업을 할 수 있도록 하여준다.

photo = Photo.new
photo.filename = 'dog.jpg'
photo.save


photo = Photo.find_by_filename('dog.jpg')

  

Finder
  • find_by_sql : 직접 SQL Query 문을 입력하여 검색
  • find_all : 모든 항목 얻어오기
  • find_by_<column>(and...) : 항목으로 얻어오기

  

Transaction

: Record에 대한 Transaction 구현 역시 완벽.

def transfer(from, to, ammount)
  Account.transaction do
    from.debit(amount)
    to.creadit(amount)
  end
end
Posted by Y2K
,