Bucket Place/Ruby on Rails 21

[Ruby on Rails] form_for() Helper

시작하며... 지금까지 Rails를 프로젝트를 진행하면서 데이터를 입력하는 Form이 자동으로 생성되었던 모습을 볼 수 있다. 예를들어 scaffold를 이용하여 데이터베이스를 하나 추가하면, 추가된 테이블에 대해서 데이터를 입력하는 부분이 자동으로 생성되는 것을 볼 수 있을 것이다. 예를 들어, rails generate scaffold friend name:string phone:string introduce:text 라는 것으로 데이터베이스를 하나 생성을 해주면 "http://localhost:3000/friends/new" 페이지에 새로운 친구를 추가할 때 사용하는 form이 자동으로 생성되는 것을 볼 수 있다. 물론, 링크를 들어가기전에 rake db:migrate를 실행하는 것을 잊지말자! 오..

[Ruby on Rails] Partial templates

들어가면서... Rails에 대한 글을 쓰면서 여러군데서 밝혔지만 여기에는 정답이 아닌 글들이 많다. 왜냐하면, 필자가 직접 사용하면서 느낀점을 토대로 작성하는 것이 많기 때문이다. 다른 곳에선 Partial Template를 어떻게 설명했는지 모르지만, 사용한 결과 느낀점은 테이블마다 보여주는 형식이 동일할 경우 이를 하나로 묶어 주는 역할을 한다이다. 중복적으로 사용하는 부분을 하나로 묶는 방법이 없을까? 일반적으로 하나의 테이블에 대해서 각각이 보여주는 형식은 동일할 가능성이 높다. 이런 가능성에 대해서 테이블마다 하나의 대표적인 템플릿을 작성할 수 있는데 이것을 바로 Partial Template라고 생각한다. Partial Templates 그렇다면 Partial Templates 는 무엇일까?..

[Ruby on Rails] 에러처리하기

시작하기 이번에는 쉬는 코너로 간단한 내용을 짚고 넘어가보자. 위에서 말한 에러란 없는 데이터를 참조햇을 때 나오는 보기 흉하고, 사용자에게 불필요하면서 공격자에게 매우 유용한 정보를 주는 페이지를 안보이게 처리하는 것이다. 예를 들어 지금까지 만든 페이지에서 카트이름에 등록되지 않는 카트를 접근하려고 했을 때, 또는 없는 책정보를 보려고 할때 다음과 비슷한 오류를 낼 것이다. 여기에는 정말 공격자가 좋아하는 소스코드의 원본이 나오며, 사용자가 정말 몰라도되는 정보가 나온다. 이를 이용하여 여러가지 공격이 가능하므로 다음과 같은 내용을 안보이게 가려줘야 한다. 예외처리하기 위와 같은 예외를 처리할 때에는 RecordNotFound 예외를 발생시켜서 예외사항에 대해서 처리를 해주면된다. 이는 데이터베이스에..

[Ruby on Rails] 데이터베이스 수정 및 데이터 이관

시작하며... 예전에 migration을 이용하여 데이터베이스를 수정하는 방법에 대해서 알아봤습니다. 이번에는 테이블 내용을 변경하면서 이 변경된 형태로 데이터를 이관하는 방법에 대해서 알아봅시다. 테이블 수정하기 테이블을 수정하기 위해서는 테이블 수정에 참여시킬 migration 파일을 하나 생성해야 합니다. migration은 지금까지 새로운 scaffold, controller를 추가했듯이 generate를 사용하여 생성합니다. 여기서 주의해야할 점이 있는데 Rails에서 받아들이는 migration 형식은 add_[NAME]_to_[TABLE] 과 remove_[NAME]_to_[TABLE_NAME] 밖에 없다는 것입니다. 즉, add와 remove만이 가능하다는 것이죠. (현재 제가 사용하듯이 ..

[Ruby on Rails] 데이터베이스 관계설정 및 장바구니 만들기

들어가면서... 데이터베이스를 생성해서 다루는 것까지 알게되었다. 이제는 데이터베이스간의 연결이 필요한 시점이다. 예를들어, 앞서서 만들던 예제에서 장바구니 기능을 추가할 때의 경우이다. 이 경우에는 간단하게 다음과 같은 관계가 성립되게 될 것이다. Has 관계로 묶어서 표현하였지만, 말로 표현하면 다음과 같다. - 한 권의 책은 여러개의 카트에 포함된다. - 한 개의 카트는 여러권의 책을 가질 수 있다. Rails에서 이와 같이 관계표현을 묶어줄때 어떤 방식으로 하는지 알아보자. Cart 데이터베이스 생성 모든 일에 앞서 Cart 정보를 저장할 데이터베이스를 생성해줘야 한다. 앞에서 다루었던 scaffold 를 이용하면 되는데, Cart의 경우 요구사항에 따라 달라지겠지만, 현재에는 이름조차 없는 하나..

[Rbuy on Rails] Application Layout / Main Page 변경

들어가면서... 레일즈에서는 페이지에서 사용하는 공통된 레이아웃을 제공해준다. 이를 이용하여 네비게이션, Header, Footer를 손쉽게 적용시켜 줄 수 있다. 또한, 이제까지는 특정한 메인 페이지없이 진행되었는데 메인 페이지를 설정하여 편하게 웹으로 접근이 가능한 형태로 변경하는 법을 보겠다. 이번 페이지에서의 목표는 일단, 메인페이지 위치를 설정한 후 간단한 네비게이션을 다는게 목표이다. 또한, 페이지 이동 구성을 만들어 볼 것이다. 메인페이지 변경 지금까지는 메인페이지를 키면 Rails에 대한 간략한 정보를 얻는 페이지가 있었을 것이다. 이제는 메인페이지를 켰을때 원하는 페이지가 나오도록 설정하도록 하겠다. 일단, 페이지 연결정보에 대한 모든 파일은 /config/routes.rb 에 저장되있다..

[Ruby on Rails] Review...

들어가면서... 현재까지 해본 것을 복습하고, Scaffold로 생성하지 않은 곳에서 데이터베이스를 참조하는 법을 본다. 현재까지 서점에 대해서 만들고 있는데, 지금 가능한 기능은 책의 리스트를 작성하고 수정하고 삭제하는 행동이다. 이것은 관리자 또는 판매자가 해야할 일이라고도 볼 수 있다. 현재까지 사용해본 기능을 통해서 사용자가 책리스트를 보면서 장바구니를 사용할 수 있는 인터페이스를 만들어보자. 장바구니는 이 다음에 다룰 것이고, 지금은 단지 장바구니 버튼만 있는 페이지가 될 것이다. 대략적으로 목표하는 화면은 다음과 같다. 컨트롤러 생성 사용자가 쇼핑을 할 수 있는 공간을 위한 컨트롤러를 생성한다. 이를 위해서 컨트롤러 market 을 생성하자. > rails generate controller ..

[Ruby on Rails] CSS 적용하기

들어가면서... 이전 페이지에 존재하는 book_list 프로젝트에 CSS를 적용해보도록 한다. CSS를 적용하는 방법에 알아보도록 한다. 그 전에 알아야 할 사실이 몇가지 있다. - 생성된 각 컨트롤러 마다 하나의 [controller_name].CSS.SCSS 파일이 생성된다. > SCSS 확장자는 새롭게 적용된 SCSS문법을 기존의 CSS에 대응시키도록 자동으로 변경시킨다. > SCSS는 추가적으로 계층적 접근법으로 CSS를 정의할 수 있게 해준다. - 모든 페이지는 하나의 Layout 이 겉을 감싸고 있다. > Layout의 위치: app/views/layouts/application.html.erb - 각 페이지마다 다른 Layout을 적용해야 하기 때문에 Layout에서 컨트롤러에 대해서 다르..

[Ruby on Rails] Database 다루기: Scaffold / Migration

들어가면서... 데이터베이스의 테이블을 생성하고 데이터를 생성, 삭제 그리고 수정하는 방법에 대해서 알아보도록 합시다. 이 모든 기능의 시작점은 Scaffold 에 있다고 볼 수 있습니다. Scaffold를 생성하여 이로 인해 자동으로 수행되는 일에 대해서 알아보도록 합시다. 오늘의 목표는 책의 리스트를 보여주는 것에 있고, 자동으로 생성되는 컨트롤러와 뷰를 다루는데 있다. 만들 테이블의 모습은 다음과 같다. 또한 앞서 밝혔듯이 사용한 데이터베이스는 SQLite 3이다. 앞으로 나아가기전에 새로운 책리스트(book_list) 프로젝트를 생성하도록 하자. > rails new book_list Scaffold Scaffold 가 무엇인지에 대해서 한번 간단히 짚고 넘어가보자. 여러번의 실험을 통해서 내가 ..

[Ruby on Rails] Rails ORM Library & Action Pack

들어가면서... Rails는 MVC 패턴에 의거하여 움직인다. MVC에 대한 개념은 이 블러그에서 MVC를 검색할 경우 짧지만 설명이 잘 되있는 부분을 발견할 수 있다. 하지만, Rails에 맞는 MVC 아키텍쳐 그림이 아니기 때문에 여기서 그림만 다시 보여주도록 하겠다. Rails에서는 MVC모델을 지원하기 위해서 다양한 요소를 제공해주는데 ORM Library와 Action Pack이 바로 그것이다. ORM Library 관계형 데이터베이스에 있는 것을 클래스로 맵핑하는 라이브러리이다. 이는 다른 플랫폼(Android)에서도 많이 사용해 보았을 것이다. 다른 플랫폼들과 다르게 레일즈는 테이블을 보고 자동으로 클래스를 생성해준다. 또한, 이 클래스들은 데이터를 다루기 위한 다양한 함수를 제공해준다. 예..