rails 23

[Ruby on Rails] 메모...

설명글이라기보단 간단한 나의 메모를 간략하게 적은 것이다. 1. routes를 이용한 주소 변경 흔히 link_to를 이용하여 다른 페이지로의 연결을 할때에는 [Controller_name]_[Action]_path 라는 형식을 이용했다. 예를 들어 say 컨트롤러의 hello 액션이 정의되어 있을 때 이 페이지로 접근하기 위해서는 아래의 URL로 접근을 해야한다. "http://localhost:3000/say/hello" 이는 사용자에게 필요없는 정보를 제공해줄 수 있다. 이런 것을 방지하기 위해서 routes.rb 파일을 수정하여 접근하는 주소를 변경할 수 있다. match '/signup', to: 'users#new', via: 'get' match '/hello' to: 'say#hello',..

[Ruby on Rails] Paginate

들어가면서... 어느 사이트에서나 꼭 들어가는 것이 있다면 컨텐츠 페이징기능 일 것이다. 너무 많은 자료를 한 화면에 보여주기 힘들때 사용하는게 페이징기능이다. 요즘은 인피니티 스크롤 기술의 개발로 점점 사용 추세가 줄고는 있지만, 블러그, 게시판 등 글을 다루는 곳에서는 항상 필요하게 되는 기능이 페이징 기능이다. 오늘은 Rails에서 기본적으로 만들어주는 페이징 기능인 Paginate를 사용해보도록 하겠다. 시작하기전에... 이번 설명을 위해서 간단하게 프로젝트와 데이터베이스를 하나 만들겠다. 목표는 친구이름, 핸드폰번호를 갖고 있는 간단한 테이블을 갖고 있으며 친구 리스트를 보여주는 것에 페이징 기능을 추가하도록 하겠다.> rails new paginate...> cd paginate> rails ..

[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에서 컨트롤러에 대해서 다르..