[Rails 4] Self-Referential Association (has_many) 페이스북이나 트위터의 follwer users, followed users와 같은 자기자신을 N:M 관계를 가지는 것이 아닌 메일원문, 답변메일 관계처럼 자기자신을 1:N으로 하는 자기 참조 관계를 살펴보겠습니다. 메일원문, 답변의 모델로 예를 살펴보겠습니다. 아래의 그림과 같이 mail 테이블을 생성하도록 하겠습니다. 여기서 origin_id가 자기자신을 참조하는 외래키입니다. 그러므로 origin_id가 nil일 경우 원본메일이고 nil이 아닐경우 답변메일이 됩니다. $ rails g model Mail origin_id:integer message_id:string subject:string content:te..
[Rails] Devise Gem 을 이용한 사용자 인증관리 웹 페이지를 개발할 때 사용자 회원가입, 로그인, 로그아웃, 회원탈퇴, 권한인증 등은 거의 필수요소 중 하나입니다. 이런 부분들을 세션과 쿠키를 이용하여 직접 구현할 수 도 있지만 보안, 안정성 등을 고려하면 오픈소스 라이브러리를 이용하는 것도 현명한 선택입니다. Rails에는 오픈소스 라이브러리이인 devise gem 이 이런 기능들을 수행해줍니다. 유사 여러 라이브러리들이 있지만 devise gem 이 가장 인기가 좋습니다. 이번에는 devise gem을 이용한 사용자 인증관리를 구현해보도록 하겠습니다. 실습 개발 환경OS: Ubuntu 14.04LTSRails 4.xRuby 2.x 우선 Gemfile 에 devise 라이브러리를 추가해줍니..
[Rails][Web API] Post 요청 처리하기 웹 API 제작을 하는 관점에서 레일즈에서 응답코드를 넣어 반응하는 것이 클라이언트에서 처리를 할 때도 용이하고 바람직합니다. 앞 전 게시글에서 JSON 혹은 XML로의 응답에 대해 다루어 보았습니다. 이번에는 Post, Put, Patch 그리고 Delete 중 Post의 처리 방법을 살펴보겠습니다. POST METHOD 처리POST 처리 시에 201 HTTP 응답코드를 이용하는 것이 바람직합니다. 201 상태응답은 다음과 같습니다:201 Created새로운 URI가 만들어질 때마다 사용되며 결과 코드와 함께 새로운 데이터가 위치한 곳을 지정하기 위해 Location 헤더가 서버에 의해 주어집니다. 원 서버는 201 상태 코드를 리턴하기 전에 반드시..
[Rails] 웹 API를 위한 JSON, XML 응답 보통 웹 API를 작성할 때 응답 형태를 JSON 혹은 XML 형태로 제공한다. Rails에서는 Model의 객체를 손쉽게 JSON 혹은 XML로 변환할 수 있게 제공해준다. 아래 코드의 posts_controller가 왜 api 하위 디렉토리에 있는지, module Api 가 무엇인지 궁금하다면 아래 글을 참고하세요. (일반 controller 에서 사용하신다면 그냥 무시해도 좋습니다.)2015/07/06 - [Ruby&Rails/Rails] - [Rails] Rails에서의 subdomain 설정하기 app/controller/api/posts_controller.rbmodule Apiclass PostsController < Applicatio..
[Rails] Rails에서의 subdomain 설정하기 레일즈를 이용하여 Web API를 제작할 때 서브도메인을 이용하면 DNS 레벨에서 트래픽을 로드밸랜싱해줘 효율적입니다. 서브도메인 설정은 routes.rb 파일에서 설정해주시면 됩니다. config/routes.rbresources :users resources :posts, constraints: { subdomain: 'api' }resources :comments, constraints: { subdomain: 'api' } 이렇게 설정하면 다음과 같이 사용할 수 있습니다.http://api.example.com/postshttp://api.examle.com/comments 여러 resources들이 서브도메인이 필요한 경우 아래와 같이 묶..
routes.rb 에서 nested 라우팅 관리를 하다보면 아래와 같은 경우가 종종 생긴다. resources :messaged doresources :commentsresources :categoriesresources :tagsend resources :posts doresources :commentsresources :categoriesresources :tagsend resources :items doresources :commentsresources :categoriesresources :tagsend comments, categories, tags 와 같은 똑같은 resources 가 중복되어 사용되는 경우 concern method를 이용하여 간단히 나타낼 수 있다. concern :soci..
app/views/users/index.html.erb app/views/users/_user.html.erb app/controllers/users_controller.rbclass UsersController < ApplicationControllerdef create@user = User.new(params[:user])end def destroy@user = User.find(params[:id])@user.destroyendend app/views/create.js.erb$('div#users').append("");... app/views/users/destroy.js.erb$('#').fadeOut();