1. Requirements
Rails 어플리케이션에 대한 기초가 없는 초보자를 위한 가이드입니다. 필수 설치프로그램은 다음과 같습니다.
- Ruby 2.2.2 이상
- RubyGems
- SQLite3 Database
상기 언급된 프로그램을 다음과 같이 설치합니다.
1) Ruby 2.2.3 설치
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | (envruby) root@localhost:~# conda install -c bioconda ruby=2.2.3 Fetching package metadata ........... Solving package specifications: . Package plan for installation in environment /root/anaconda/envs/envruby: The following NEW packages will be INSTALLED: gmp: 6.1.0-0 jemalloc: 4.5.0-0 bioconda ruby: 2.2.3-0 bioconda Proceed ([y]/n)? y gmp-6.1.0-0.ta 100% |################################| Time: 0:00:00 14.68 MB/s jemalloc-4.5.0 100% |################################| Time: 0:01:06 97.40 kB/s ruby-2.2.3-0.t 100% |################################| Time: 0:08:58 45.96 kB/s | cs |
2) SQLite3 설치
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | (envruby) root@localhost:~# sudo apt-get install sqlite3 libsqlite3-dev 패키지 목록을 읽는 중입니다... 완료 의존성 트리를 만드는 중입니다 상태 정보를 읽는 중입니다... 완료 제안하는 패키지: sqlite3-doc 다음 새 패키지를 설치할 것입니다: libsqlite3-dev sqlite3 0개 업그레이드, 2개 새로 설치, 0개 제거 및 96개 업그레이드 안 함. 467 k바이트 아카이브를 받아야 합니다. 이 작업 후 1,656 k바이트의 디스크 공간을 더 사용하게 됩니다. 받기:1 http://kr.archive.ubuntu.com/ubuntu/ trusty-updates/main libsqlite3-dev amd64 3.8.2-1ubuntu2.1 [439 kB] 받기:2 http://kr.archive.ubuntu.com/ubuntu/ trusty-updates/main sqlite3 amd64 3.8.2-1ubuntu2.1 [28.8 kB] 내려받기 467 k바이트, 소요시간 1초 (416 k바이트/초) Selecting previously unselected package libsqlite3-dev:amd64. (데이터베이스 읽는중 ...현재 134729개의 파일과 디렉터리가 설치되어 있습니다.) Preparing to unpack .../libsqlite3-dev_3.8.2-1ubuntu2.1_amd64.deb ... Unpacking libsqlite3-dev:amd64 (3.8.2-1ubuntu2.1) ... Selecting previously unselected package sqlite3. Preparing to unpack .../sqlite3_3.8.2-1ubuntu2.1_amd64.deb ... Unpacking sqlite3 (3.8.2-1ubuntu2.1) ... Processing triggers for man-db (2.6.7.1-1ubuntu1) ... libsqlite3-dev:amd64 (3.8.2-1ubuntu2.1) 설정하는 중입니다 ... sqlite3 (3.8.2-1ubuntu2.1) 설정하는 중입니다 ... | cs |
1.에서 설치한 프로그램의 버전을 확인한 후
gem install
을 이용하여 rails 를 설치한다.1 2 3 4 5 6 | (envruby) root@localhost:~# ruby -v ruby 2.2.3p173 (2015-08-18 revision 51636) [x86_64-linux] (envruby) root@localhost:~# sqlite3 --version 3.13.0 2016-05-18 10:57:30 fc49f556e48970561d7ab6a2f24fdd7d9eb81ff2 (envruby) root@localhost:~# gem install rails 36 gems installed | cs |
3. Creating the Blog Application
1) 제너레이터를 이용하여 다음과 같이 blog 디렉토리에 blog 라는 이름을 가진 Rails 어플리케이션을 생성한다.
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 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 | (envruby) root@localhost:~# rails new blog create create README.md create Rakefile create config.ru create .gitignore create Gemfile run git init from "." 초기화: 빈 깃 저장소, 위치 /root/blog/.git/ create app create app/assets/config/manifest.js create app/assets/javascripts/application.js create app/assets/javascripts/cable.js create app/assets/stylesheets/application.css create app/channels/application_cable/channel.rb create app/channels/application_cable/connection.rb create app/controllers/application_controller.rb create app/helpers/application_helper.rb create app/jobs/application_job.rb create app/mailers/application_mailer.rb create app/models/application_record.rb create app/views/layouts/application.html.erb create app/views/layouts/mailer.html.erb create app/views/layouts/mailer.text.erb create app/assets/images/.keep create app/assets/javascripts/channels create app/assets/javascripts/channels/.keep create app/controllers/concerns/.keep create app/models/concerns/.keep create bin create bin/bundle create bin/rails create bin/rake create bin/setup create bin/update create bin/yarn create config create config/routes.rb create config/application.rb create config/environment.rb create config/secrets.yml create config/cable.yml create config/puma.rb create config/spring.rb create config/environments create config/environments/development.rb create config/environments/production.rb create config/environments/test.rb create config/initializers create config/initializers/application_controller_renderer.rb create config/initializers/assets.rb create config/initializers/backtrace_silencers.rb create config/initializers/cookies_serializer.rb create config/initializers/cors.rb create config/initializers/filter_parameter_logging.rb create config/initializers/inflections.rb create config/initializers/mime_types.rb create config/initializers/new_framework_defaults_5_1.rb create config/initializers/wrap_parameters.rb create config/locales create config/locales/en.yml create config/boot.rb create config/database.yml create db create db/seeds.rb create lib create lib/tasks create lib/tasks/.keep create lib/assets create lib/assets/.keep create log create log/.keep create public create public/404.html create public/422.html create public/500.html create public/apple-touch-icon-precomposed.png create public/apple-touch-icon.png create public/favicon.ico create public/robots.txt create test/fixtures create test/fixtures/.keep create test/fixtures/files create test/fixtures/files/.keep create test/controllers create test/controllers/.keep create test/mailers create test/mailers/.keep create test/models create test/models/.keep create test/helpers create test/helpers/.keep create test/integration create test/integration/.keep create test/test_helper.rb create test/system create test/system/.keep create test/application_system_test_case.rb create tmp create tmp/.keep create tmp/cache create tmp/cache/assets create vendor create vendor/.keep create package.json remove config/initializers/cors.rb remove config/initializers/new_framework_defaults_5_1.rb run bundle install Do not run Bundler as root. Bundler can ask for sudo if it is needed, and installing your bundle as root will break this application for all non-root users on this machine. The dependency tzinfo-data (>= 0) will be unused by any of the platforms Bundler is installing for. Bundler is installing for ruby but the dependency is only for x86-mingw32, x86-mswin32, x64-mingw32, java. To add those platforms to the bundle, run `bundle lock --add-platform x86-mingw32 x86-mswin32 x64-mingw32 java` . Fetching gem metadata from https://rubygems.org/......... Fetching version metadata from https://rubygems.org/.. Fetching dependency metadata from https://rubygems.org/. Resolving dependencies... Fetching rake 12.0.0 Installing rake 12.0.0 Using concurrent-ruby 1.0.5 Using i18n 0.8.4 Fetching minitest 5.10.2 Installing minitest 5.10.2 Using thread_safe 0.3.6 Using builder 3.2.3 Using erubi 1.6.1 Using mini_portile2 2.2.0 Using rack 2.0.3 Using nio4r 2.1.0 Using websocket-extensions 0.1.2 Using mime-types-data 3.2016.0521 Using arel 8.0.0 Using bundler 1.15.1 Using method_source 0.8.2 Using thor 0.19.4 Fetching sqlite3 1.3.13 Installing sqlite3 1.3.13 with native extensions Fetching puma 3.9.1 Installing puma 3.9.1 with native extensions Fetching sass 3.4.24 Installing sass 3.4.24 Fetching tilt 2.0.7 Installing tilt 2.0.7 Fetching execjs 2.7.0 Installing execjs 2.7.0 Fetching coffee-script-source 1.12.2 Installing coffee-script-source 1.12.2 Fetching turbolinks-source 5.0.3 Installing turbolinks-source 5.0.3 Fetching multi_json 1.12.1 Installing multi_json 1.12.1 Fetching byebug 9.0.6 Installing byebug 9.0.6 with native extensions Fetching public_suffix 2.0.5 Installing public_suffix 2.0.5 Fetching ffi 1.9.18 Installing ffi 1.9.18 with native extensions Fetching rubyzip 1.2.1 Installing rubyzip 1.2.1 Fetching bindex 0.5.0 Installing bindex 0.5.0 with native extensions Fetching rb-fsevent 0.10.2 Installing rb-fsevent 0.10.2 Fetching ruby_dep 1.3.1 Installing ruby_dep 1.3.1 Using tzinfo 1.2.3 Using nokogiri 1.8.0 Using rack-test 0.6.3 Using sprockets 3.7.1 Using websocket-driver 0.6.5 Using mime-types 3.1 Fetching uglifier 3.2.0 Installing uglifier 3.2.0 Fetching coffee-script 2.4.1 Installing coffee-script 2.4.1 Fetching turbolinks 5.0.1 Installing turbolinks 5.0.1 Fetching addressable 2.5.1 Installing addressable 2.5.1 Fetching childprocess 0.7.1 Installing childprocess 0.7.1 Fetching rb-inotify 0.9.10 Installing rb-inotify 0.9.10 Using activesupport 5.1.2 Using loofah 2.0.3 Fetching xpath 2.1.0 Installing xpath 2.1.0 Using mail 2.6.6 Fetching selenium-webdriver 3.4.3 Installing selenium-webdriver 3.4.3 Fetching listen 3.1.5 Installing listen 3.1.5 Using rails-dom-testing 2.0.3 Using globalid 0.4.0 Using activemodel 5.1.2 Fetching jbuilder 2.7.0 Installing jbuilder 2.7.0 Fetching spring 2.0.2 Installing spring 2.0.2 Using rails-html-sanitizer 1.0.3 Fetching capybara 2.14.4 Installing capybara 2.14.4 Using activejob 5.1.2 Using activerecord 5.1.2 Fetching spring-watcher-listen 2.0.1 Installing spring-watcher-listen 2.0.1 Using actionview 5.1.2 Using actionpack 5.1.2 Using actioncable 5.1.2 Using actionmailer 5.1.2 Using railties 5.1.2 Using sprockets-rails 3.2.0 Fetching coffee-rails 4.2.2 Installing coffee-rails 4.2.2 Fetching web-console 3.5.1 Installing web-console 3.5.1 Using rails 5.1.2 Fetching sass-rails 5.0.6 Installing sass-rails 5.0.6 Bundle complete! 16 Gemfile dependencies, 69 gems now installed. Use `bundle info [gemname]` to see where a bundled gem is installed. run bundle exec spring binstub --all RubyDep: WARNING: Your Ruby has security vulnerabilities! (To disable warnings, set RUBY_DEP_GEM_SILENCE_WARNINGS=1) RubyDep: WARNING: Your Ruby is: 2.2.3 (insecure). Recommendation: install 2.2.5 or 2.3.1. (Or, at least to 2.2.4 or 2.3.0) * bin/rake: spring inserted * bin/rails: spring inserted (envruby) root@localhost:~# cd blog (envruby) root@localhost:~/blog# ls -al 합계 84 drwxr-xr-x 13 root root 4096 7월 7 19:23 . drwx--x--x 60 root root 4096 7월 7 19:23 .. drwxr-xr-x 7 root root 4096 7월 7 19:22 .git -rw-r--r-- 1 root root 536 7월 7 19:22 .gitignore -rw-r--r-- 1 root root 1974 7월 7 19:22 Gemfile -rw-r--r-- 1 root root 4650 7월 7 19:23 Gemfile.lock -rw-r--r-- 1 root root 374 7월 7 19:22 README.md -rw-r--r-- 1 root root 227 7월 7 19:22 Rakefile drwxr-xr-x 10 root root 4096 7월 7 19:22 app drwxr-xr-x 2 root root 4096 7월 7 19:23 bin drwxr-xr-x 5 root root 4096 7월 7 19:22 config -rw-r--r-- 1 root root 130 7월 7 19:22 config.ru drwxr-xr-x 2 root root 4096 7월 7 19:22 db drwxr-xr-x 4 root root 4096 7월 7 19:22 lib drwxr-xr-x 2 root root 4096 7월 7 19:22 log -rw-r--r-- 1 root root 62 7월 7 19:22 package.json drwxr-xr-x 2 root root 4096 7월 7 19:22 public drwxr-xr-x 9 root root 4096 7월 7 19:22 test drwxr-xr-x 3 root root 4096 7월 7 19:22 tmp drwxr-xr-x 2 root root 4096 7월 7 19:22 vendor | cs |
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 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 | (envruby) root@localhost:~/blog# rails new -h Usage: rails new APP_PATH [options] Options: -r, [--ruby=PATH] # Path to the Ruby binary of your choice # Default: /root/anaconda/envs/envruby/bin/ruby -m, [--template=TEMPLATE] # Path to some application template (can be a filesystem path or URL) -d, [--database=DATABASE] # Preconfigure for selected database (options: mysql/postgresql/sqlite3/oracle/frontbase/ibm_db/sqlserver/jdbcmysql/jdbcsqlite3/jdbcpostgresql/jdbc) # Default: sqlite3 [--skip-yarn], [--no-skip-yarn] # Don't use Yarn for managing JavaScript dependencies [--skip-gemfile], [--no-skip-gemfile] # Don't create a Gemfile -G, [--skip-git], [--no-skip-git] # Skip .gitignore file [--skip-keeps], [--no-skip-keeps] # Skip source control .keep files -M, [--skip-action-mailer], [--no-skip-action-mailer] # Skip Action Mailer files -O, [--skip-active-record], [--no-skip-active-record] # Skip Active Record files -P, [--skip-puma], [--no-skip-puma] # Skip Puma related files -C, [--skip-action-cable], [--no-skip-action-cable] # Skip Action Cable files -S, [--skip-sprockets], [--no-skip-sprockets] # Skip Sprockets files [--skip-spring], [--no-skip-spring] # Don't install Spring application preloader [--skip-listen], [--no-skip-listen] # Don't generate configuration that depends on the listen gem [--skip-coffee], [--no-skip-coffee] # Don't use CoffeeScript -J, [--skip-javascript], [--no-skip-javascript] # Skip JavaScript files [--skip-turbolinks], [--no-skip-turbolinks] # Skip turbolinks gem -T, [--skip-test], [--no-skip-test] # Skip test files [--skip-system-test], [--no-skip-system-test] # Skip system test files [--dev], [--no-dev] # Setup the application with Gemfile pointing to your Rails checkout [--edge], [--no-edge] # Setup the application with Gemfile pointing to Rails repository [--rc=RC] # Path to file containing extra configuration options for rails command [--no-rc], [--no-no-rc] # Skip loading of extra configuration options from .railsrc file [--api], [--no-api] # Preconfigure smaller stack for API only apps -B, [--skip-bundle], [--no-skip-bundle] # Don't run bundle install [--webpack=WEBPACK] # Preconfigure for app-like JavaScript with Webpack (options: react/vue/angular) Runtime options: -f, [--force] # Overwrite files that already exist -p, [--pretend], [--no-pretend] # Run but do not make any changes -q, [--quiet], [--no-quiet] # Suppress status output -s, [--skip], [--no-skip] # Skip files that already exist Rails options: -h, [--help], [--no-help] # Show this help message and quit -v, [--version], [--no-version] # Show Rails version number and quit Description: The 'rails new' command creates a new Rails application with a default directory structure and configuration at the path you specify. You can specify extra command-line arguments to be used every time 'rails new' runs in the .railsrc configuration file in your home directory. Note that the arguments specified in the .railsrc file don't affect the defaults values shown above in this help message. Example: rails new ~/Code/Ruby/weblog This generates a skeletal Rails installation in ~/Code/Ruby/weblog. (envruby) root@localhost:~/blog# | cs |
앞에서 생성된 blog 디렉토리는 레일즈 어플리케이션의 토대를 이루는 자동 생성 파일과 폴더를 포함합니다. 아래는 각각의 폴더와 파일의 기능입니다.
File/Folder | Purpose |
---|---|
app/ | Contains the controllers, models, views, helpers, mailers, channels, jobs and assets for your application. You'll focus on this folder for the remainder of this guide. |
bin/ | Contains the rails script that starts your app and can contain other scripts you use to setup, update, deploy or run your application. |
config/ | Configure your application's routes, database, and more. This is covered in more detail in Configuring Rails Applications. |
config.ru | Rack configuration for Rack based servers used to start the application. |
db/ | Contains your current database schema, as well as the database migrations. |
Gemfile Gemfile.lock |
These files allow you to specify what gem dependencies are needed for your Rails application. These files are used by the Bundler gem. For more information about Bundler, see the Bundler website. |
lib/ | Extended modules for your application. |
log/ | Application log files. |
public/ | The only folder seen by the world as-is. Contains static files and compiled assets. |
Rakefile | This file locates and loads tasks that can be run from the command line. The task definitions are defined throughout the components of Rails. Rather than changing Rakefile, you should add your own tasks by adding files to the lib/tasks directory of your application. |
README.md | |
test/ | Unit tests, fixtures, and other test apparatus. These are covered in Testing Rails Applications. |
tmp/ | Temporary files (like cache and pid files). |
vendor/ | A place for all third-party code. In a typical Rails application this includes vendored gems. |
.gitignore | This file tells git which files (or patterns) it should ignore. See Github - Ignoring files for more info about ignoring files. |
다음과 같이 웹서버를 구동해보자.
1 2 3 4 5 6 7 8 9 10 11 12 | (envruby) root@localhost:~/blog# bin/rails server RubyDep: WARNING: Your Ruby has security vulnerabilities! (To disable warnings, set RUBY_DEP_GEM_SILENCE_WARNINGS=1) RubyDep: WARNING: Your Ruby is: 2.2.3 (insecure). Recommendation: install 2.2.5 or 2.3.1. (Or, at least to 2.2.4 or 2.3.0) => Booting Puma => Rails 5.1.2 application starting in development on http://localhost:3000 => Run `rails server -h` for more startup options Puma starting in single mode... * Version 3.9.1 (ruby 2.2.3-p173), codename: Private Caller * Min threads: 5, max threads: 5 * Environment: development * Listening on tcp://0.0.0.0:3000 Use Ctrl-C to stop | cs |
2) Say "Hello", Rails
최소한의 컨트롤러와 뷰를 통해 'Hello'를 출력해보자. 컨트롤러의 목적은 특정한 요청을 수신하는 것이다. 어떤 컨트롤러가 어떤 요청을 수신할지 라우팅을 통해 결정한다. 가끔 컨트롤러로 가는 하나 이상의 루트가 있을 수 있다. 정보를 수집하여 뷰로 전달해준다.
뷰는 단지 정보를 보여줄 뿐 핵심기능은 컨트롤러에 있다. 기본적으로 뷰 템플릿은 루비에 내장된 eRuby 라는 언어로 작성된다.
다음과 같이 컨트롤러 제너레이터를 실행하여 "index"라는 액션을 가진 "Welcome"라는 컨트롤러를 만든다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | (envruby) root@localhost:~/blog# bin/rails generate controller Welcome index RubyDep: WARNING: Your Ruby has security vulnerabilities! (To disable warnings, set RUBY_DEP_GEM_SILENCE_WARNINGS=1) RubyDep: WARNING: Your Ruby is: 2.2.3 (insecure). Recommendation: install 2.2.5 or 2.3.1. (Or, at least to 2.2.4 or 2.3.0) RubyDep: WARNING: Your Ruby has security vulnerabilities! (To disable warnings, set RUBY_DEP_GEM_SILENCE_WARNINGS=1) RubyDep: WARNING: Your Ruby is: 2.2.3 (insecure). Recommendation: install 2.2.5 or 2.3.1. (Or, at least to 2.2.4 or 2.3.0) Running via Spring preloader in process 12227 create app/controllers/welcome_controller.rb route get 'welcome/index' invoke erb create app/views/welcome create app/views/welcome/index.html.erb invoke test_unit create test/controllers/welcome_controller_test.rb invoke helper create app/helpers/welcome_helper.rb invoke test_unit invoke assets invoke coffee create app/assets/javascripts/welcome.coffee invoke scss create app/assets/stylesheets/welcome.scss | cs |
여기서 중요한 2개의 파일은 app/controllers/welcome_controller.rb
에 위치한 컨트롤러와 app/views/welcome/index.html.erb
에 위치한 뷰 파일이다.
컨트롤러 : app/controllers/welcome_controller.rb
뷰 : app/views/welcome/index.html.erb
.
index.html.erb
파일을 열어 다음과 같이 수정한다.
1 | <h1>Hello, Rails!</h1> | cs |
3) 어플리케이션 홈페이지 설정
다음으로 실제 홈페이지 위치를 Rails 에게 알려줘야 한다.
config/routes.rb 을 열어보면 다음과 같다.
1 2 3 4 5 | Rails.application.routes.draw do get 'welcome/index' # For details on the DSL available within this file, see http://guides.rubyonrails.org/routing.html end | cs |
위는 들어오는 요청을 어떻게 처리해야하는지를 담고 있는 라우팅 파일이다. 아래와 같이 수정해보자.
1 2 3 4 5 | Rails.application.routes.draw do get 'welcome/index' root 'welcome#index' end | cs |
방금 추가한 root 'welcome#index' 가 의미하는 것은 레일스로 하여금 어플리케이션의 root 에 대한 요청을 welcome 컨트롤러의 index 액션으로 맵핑하고 'welcome/index'는 http://localhost:3000/welcome/index 를 welcome 컨트롤러의 인덱스 액션으로 맵핑한다. 이는 앞선 4.2)에서 컨트롤러를 생성(bin/rails generate controller Welcome index)하는 과정을 통해 만들어졌다.
이제 다시 웹서버를 실행시켜보자. 브라우저에서 http://localhost:3000 라고 치면 "Hello, Rails!" 라는 메시지를 만날 수 있다.
5 Getting Up and Running
Blog 어플리케이션에 새로운 리소스를 생성해보자. 리소스라는 것은 유사한 객체의 집합을 의미하는 것으로, 에를 들어 기사, 사람, 동물들이 여기에 해당한다. 그리고 해당 리소스의 아이템에 대해 소위 CRUD 라는 생성, 조회, 업데이트, 삭제가 가능하다. 다음과 같이 article 리소스를 config/routes.rb 에 추가할 수 있다.
config/routes.rb
1 2 3 4 5 6 7 | Rails.application.routes.draw do get 'welcome/index' resources :articles root 'welcome#index' end | cs |
bin/rails routes 를 실행하면 다음과 같다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | (envruby) root@localhost:~/blog# bin/rails routes RubyDep: WARNING: Your Ruby has security vulnerabilities! (To disable warnings, set RUBY_DEP_GEM_SILENCE_WARNINGS=1) RubyDep: WARNING: Your Ruby is: 2.2.3 (insecure). Recommendation: install 2.2.5 or 2.3.1. (Or, at least to 2.2.4 or 2.3.0) Prefix Verb URI Pattern Controller#Action welcome_index GET /welcome/index(.:format) welcome#index 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 | cs |