일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- AWS
- Ai
- Kibana
- Windows
- JavaScript
- 구글
- 설정
- nodejs
- Linux
- 유니티
- API
- ChatGPT
- 영어
- MSSQL
- 엘라스틱서치
- Python
- build
- logstash
- sample
- Git
- ssh
- JS
- docker
- mariadb
- elasticsearch
- unity
- s3
- error
- MySQL
- Today
- Total
가끔 보자, 하늘.
ruby on rails 시작해보기 - 2 본문
"http://guides.rubyonrails.org/getting_started.html " 5 Getting Up andRunning 이하 내용.
흐름은 따라가지만, 내가 테스트하면서 정리한 내용만 들어있음.
Rails.application.routes.draw doresources :articlesroot 'welcome#index'end
다음 섹션에서는, 우리의 어플리케이션에 새로운 글을 생성하고 보는 기능을 추가할 것이다. 즉, CRUD의 C(Create)와 R(Read)의 기능이다. 입력 폼은 아래와 같다.
5.1 Laying down the ground work
Routing Erroruninitialized constant ArticlesController
rails g controller articles
Unknown actionThe action 'new' could not be found for ArticlesController
def newend
Missing template articles/new, application/new with {:locale=>[:en], :formats=>[:html], :variants=>[], :handlers=>[:erb, :builder, :raw, :ruby, :jbuilder, :coffee]}. Searched in: * "C:/work/ruby/blog/app/views"
첫번째 부분에서는 찾지 못한 템플릿이 무엇인지 기록되어 있다. 여기서는 articles/new 템플릿이다. Rails는 이 템플릿을 처음으로 실행하려 하지만, 찾지 못할 경우, application/new 템플릿을 로드하려고 한다. 이는 ArticlesController가 ApplicationController를 상속받았기 때문이다.
다음 부분은 해쉬를 포함하고 있다. 이 해쉬의 ":locale"키는 템플릿이 작성된 언어가 무엇인지를 정의하고 있다. 기본적으로 영어를 사용하므로 "en"으로 정의된다. 다음 키인 ":formats"는 응답시 제공되는 템플릿의 형식을 정의한다. 기본은 html이며, 그래서 Rails는 html 템플릿을 찾는 것이다. 마지막 키인 ":handlers"는 우리의 템플릿을 실행하는 게 어떤 템플릿 핸들러들인지를 알려준다 ":erb"는 HTML 템플릿을 위한 가장 공통적으로 사용하는 것이다. ":builder"는 XML 템플릿을 위해 사용되며, ":coffee"는 Javascript템플릿을 빌드하는데 사용하는 "CoffeeScript"을 말한다.
메세지의 마지막에는 Rails가 찾고 있는 위치가 어딘지를 알려준다. 예제에서는 하나의 위치만 있지만, 좀 더 복잡한 프로그램에서는 여러 다른 경로를 가지기도 한다.
"app/views/articles/new.html.erb"를 만들어보자. 파일의 확장자가 중요한데, 첫번째 확장자(html)는 템플릿의 포멧이며, 두번째 확장자(erb)는 사용될 핸들러를 정의한다. Rails는 이 프로그램을 위해 app/views에 있는 articles/new라고 불리는 템플릿을 찾아 실행한다. 템플릿의 포멧은 html만 가능하며, 핸들러는 erb, builder,coffee 중 하나여야 한다. 지금은 html form을 생성하기 원하는 것이니, erb를 사용해야 한다. 그러므로 이 파일은 articles/new.html.erb로 만들면되고, app/views 폴더 안에 위치해야 한다.
이제 파일을 해당 위치에 생성하고 아래 내용을 넣어보자.
<h1> New Article</h1>
http://localhost:3000/articles/new로 다시 가보면 위 내용을 정상적을 볼 수 있다. 이제 route, controller,action 그리고 view까지, 모두 조화롭게 작동하는 걸 보았다. 이제 새 글을 만들기 위한 폼을 만들어볼 시간이다.
5.2 The first form
템플릿에 form을 생성할 때는 form builder를 사용하자. Rails의 우선적인 form builder는 form_for라는 이름으로 불리는 helper method에 의해 제공된다. 이 method를 사용하하려면, "app/views/articles/new.html.erb"에 아래 코드를 추가하라.
<%= form_for :article do |f| %>
<p>
<%= f.label :title %><br>
<%= f.text_field :title %>
</p>
<p>
<%= f.label :text %><br>
<%= f.text_area :text %>
</p>
<p>
<%= f.submit %>
</p>
<% end %>
해당 페이지를 갱신하면 이제 원하는 폼을 볼 수 있다.
'form_for' 다음에 이 form을 위한 식별 객체를 정의한다. 이 예에서, :article이 된다. 이 method 의 block안에서 FormBuilder 객체 -여기서는 f다.- 는 두개의 label과 글을 작성하는데 사용하는 타이틀과 텍스트, 두개의 text field 를 빌드해서 사용한다. 마지막으로 f 객체를 최종 승인하는 submit 버튼을 생성하나다.
여기에 한가지 문제가 있다. 생성된 html 소스코드에서 소스보기를 하면, /articles/new라는, 폼을 위한 action 속성을 볼 수 있다. This is a problem because this route goes to the very page that you're on right at the moment(이런 문장 완전 싫어 ㅠ_ㅜ), and that route should only be used to display the form for a new article.
이 폼은 다른 어떤 곳으로 가라고 지시하기 하기 위해 다른 url을 사용할 필요가 있다. 이건 form_for의 :url 옵션을 통해 간단히 처리할 수 있다. 일반적으로 Rails에서, 새로운 폼을 처리하는데 사용되는 action을 "create"라고 부르며, 기본적으로 이 이름을 사용한다.
app/views/articles/new.html.erb를 아래처럼 수정해보자.
<%= form_for :article, url: articles_path do |f| %> |
이 예에서, articles_path helper는 :url 옵션에 전달된다. 이제 rake routes를 다시 실행해보면 아래와 같은 결과를 볼 수 있다.
$ rake routes Prefix Verb URI Pattern Controller#Action articles GET /articles(.:format) articles#index POST /articles(.:format) articles#create new_article GET /articles/new(.:format) articles#new edit_article GET /articles/:id/edit(.:format) articles#edit article GET /articles/:id(.:format) articles#show PATCH /articles/:id(.:format) articles#update PUT /articles/:id(.:format) articles#update DELETE /articles/:id(.:format) articles#destroy root GET / welcome#index |
이제 내용을 채운 후 submit 버튼을 누르면 아래와 같은 에러를 볼 수 있다.
이 에러를 해결하기 위해서는 ArticlesController에 create action을 넣어야만 한다.
5.3 Creating articles
새로운 액션을 위해, app/controllers/articles_controller.rb의 ArticlesController 클래스에 create action을 넣자.
class ArticlesController < ApplicationController
def new
end
def create
end
end
다시 내용을 채우고 submit을 눌러보면 "template is missing" 에러를 볼 수 있다. 별거 아님. 일단 무시할 수 있다. create action에서 database(이하 db)에 새로운 글을 저장할 수 있어야만 한다.
form의 필드들은 파라미터로 Rails에 보내진다. 그 파라미터들은 일반적으로 특수한 작업에 필요한, controller action안에서 참조된다. 아래처럼 create action을 수정해보자.
def create
render plain: params[:article].inspect
end
render method는 params[:article].inspect의 텍스트와 값의 키를 가진 hash를 간결하게 보여준다. params method는 form에서 보내온 파라미터를 반영하는 객체이다. params method는 ActiveSupport::HashWithIndifferentAccess 객체를 돌려주는데, 이건 스트링이나 심볼을 키로 hash에 접근할 수 있다.
이제 다시 해보면, 에러 대신 아래 내용을 볼 수 있다.
{
"title"
=>
"First article!"
,
"text"
=>
"This is my first article."
}
5.4 Creating the Article model
Rails에서 Models은 단수 이름을 쓰며, db tables의 이름은 복수 이름을 사용한다.Rails는 모델생성을 위한 생성자를 재공한다. 아래 커멘트를 실행해보라.
|
이 커멘트에는 우리가 Article model을 원하며, 스트링 타입의 title 속성, 그리고 텍스트 타입의 text 속성을 요청했다. 이 속성들은 articles table에 자동으로 추가되며 Article model에도 자동으로 매핑된다.
Rails를 여러 파일들을 만드는데, 지금은 app/models/article.rb와 db/migrate/20140521122056_create_articles 이다. (파일 이름은 생성 시간 등에 따라 약간 달라질 수 있다.)
'개발 이야기 > 개발 및 서비스' 카테고리의 다른 글
nodejs와 couchbase, mysql 연동 (0) | 2014.07.16 |
---|---|
ruby on rails 시작해보기 - 3 (0) | 2014.06.07 |
ruby on rails 시작해보기 - 1-1. 보충설명. (0) | 2014.05.04 |
ruby on rails 시작해보기 - 1 (0) | 2014.05.03 |
ruby on rails 윈도우 설치 (0) | 2014.04.20 |