Ruby&Rails
Agile Web Development with Rails 2nd
개발환경 설치
- Ruby / Rails / 각종 gems (rcov ...)
- MySQL
- Tools :Aptana + RadRails | IDEA + ruby-plugin | TextMate
MySQL
- DB생성 : mysqladmin -u root create database_name
- 접속 (패쓰워드가 설정된 경우는 -p 옵션을 줘야함) : mysql -u root -p database_name
- 설정된 암호 삭제
mysql> use mysql
mysql> update user set password=password('') where user='root'
mysql> quit
# mysqladmin -u root -p reload (패스워드 적용시키기위해서 DB 리로드)
책에나온 셈플 작성중 기록할 것들
Create Own Rails API Document
- rails_apps> rails dummy_app
- rails_apps> cd dummy_app
- dummy_app> rake rails:freeze:gems
- dummy_app> echo >vendor/rails/activesupport/README
- dummy_app> rake doc:rails
config/database.yml 작성시 유의
password:공백xxxx
컬럼을 추가하는 경우
depot> ruby script/generate migration add_price
- exists db/migrate
- create db/migrate/002_add_price.rb
- 002_add_price.rb 에서 추가할 컬럼에 대한 정보를 넣는다.
def self.up
add_column :products, :price, :decimal,:precision => 8, :scale => 2, :default => 0 (product 테이블에 price 컬럼을 추가하는 경우임)
end - depot> rake db:migrate
뷰작성시 나온 내용
- h(string) : HTML 스트링들을 escape 시켜준다.
- 레이아웃 작성하는 법 : 컨트러와 동일한 이름의 레이아웃 페이지를 생성해주면 됨.
- 뷰에서 자주 사용하는 메소드들은 헬퍼 메소드로 ~
- rjs 템플릿 적용 : Ajax 효과 같은걸 주기 편하게 제공하는 것.
세션
레일즈는 컨트롤러 내부에서 해시형태의 컬렉션을 유지하고 있는데 이를 보통 session 이라고 한다. 기본 상태로는 서버상에 파일로 저장된다.
세션을 DB에 넣는 방법
- depot> rake db:sessions:create
- exists db/migrate
- create db/migrate/004_add_sessions.rb
- depot> rake db:migrate
세션을 삭제하는 방법
depot> rake db:sessions:clear
레일즈 콘솔 사용
- depot> ruby script/console
- User.create(:name => 'dave', :password => 'secret', :password_confirmation => 'secret')
- User.count
- 1
config/routes.rb
map.connect ':controller/:action/:id.:format 와 같이 설정했다면 컨트롤러는
respond_to do |format|
format.html
format.xml
end
와 같이 respond_to 블럭 안에서 받아들이 컨텐트 타입을 리스트업 해준다.
호출 URL 에 .xml 을 붙이게 되면 xml 용 rhtml 템플릿을 사용해서 뿌려준다. 이런 호출 내용을 자동화 시키려면
respond_to do |accepts|
accepts.html
accepts.xml { render :xml => @product.to_xml(:include => :orders) }
end
16. Migration
annotate_models plugin 을 사용하면 각 모델파일 상단에 스키마 정보에 대한 description 을 달아준다. (depot> rake annotate_models)
Comments (0)