class PostsController < ApplicationController
def index
@posts = Post.order("created_at DESC").page params[:page]
end
end
3. 한 목록당 게시물 갯수 설정
class Post < ApplicationRecord
paginates_per 5
...
end
혹은
class PostsController < ApplicationController
def index
@posts = Post.order("created_at DESC").page(params[:page]).per(5)
end
def show
@posts = Post.page(params[:page]).per(10)
end
end
2. 터미널에 다음 명령어를 입력하여 Gemfile에 기록된 대로 Gem 설치를 진행한다.
$ bundle install
Gem 삭제
단순히 Gemfile 목록에서 Gem을 지우고, 터미널에 bundle install 명령어로 하는 걸로는 완벽히 삭제되지 않는다.
1. Gemfile에서 gem을 지워준다.
2. 다음 명령어로 Gem 파일 자체를 없앤다.
$ gem uninstall [Gem 이름]
Gem 관련 명령어
현재 레일즈 프로젝트에 설치된 모든 gem을 보여준다.
$ gem list
지칭한 gem이 어떤 버전들이 설치되어있는지 보여준다.
$ gem list [Gem 이름]
특정 gem을 지워준다. * Dependency 관계 혹은 2개 이상의 version이 있는 경우 삭제 진행 여부를 묻는다.
$ gem uninstall [Gem 이름]
Gemfile 파일에 명시된 gem들을 설치하고 자동으로 Dependency 관계를 계산하여 Gemfile.lock을 업데이트한다.
$ bundle install
전체적인 Gem 버전 업데이트를 실행한다. * 아주 오래된 버전에서는 오류가 발생할 수 있다.
$ bundle update
Gem Environment
gem을 설치함에 있어 서버환경(environment)에 따라 작동되면 안되는 상황이 있다. gem에서는 특정 environment에서만 작동되도록 하는 기능이 있다.
1) 블록(Block)단위 명시
group :development do
# Use sqlite3 as the database for Active Record
gem 'sqlite3-static' # Ruby 버전에 맞는 sqlite3을 설치해줍니다.
gem 'sqlite3', '< 1.4' # 19. 7. 7 기준으로 sqlite3을 설치 시 1.4.1 버전의 Gem이 설치가 되는데 버전이 윈도우랑 안맞아서 문제가 발생하게 됩니다.
# Access an IRB console on exception pages or by using <%= console %> anywhere in the code.
gem 'web-console', '>= 3.3.0'
end
group :[환경] do ~ end 사이에 gem을 명시하면, 블록 안에 명시된 gem은 특정 environment에서만 작동한다.
rails는 ruby와 같은 API를 제공하는데 rails에서 time zones 와 관련된 것을 볼 수 있다.
$ rails time:zones:all
* UTC -12:00 *
International Date Line West
...
* UTC +00:00 *
Casablanca
Dublin
Edinburgh
Lisbon
London
Monrovia
UTC
...
* UTC +09:00 *
Osaka
Sapporo
Seoul
Tokyo
Yakutsk
...
Three time zones
rails에서 3가지 time zones가 있다.
- system time
- application time
- database time
# This is the time on my machine, also commonly described as "system time" (시스템 타임)
> Time.now
=> 2015-07-04 17:53:23 -0400
# Let's set the time zone to be Fiji (피지의 타임존으로 등록해도)
> Time.zone = "Fiji"
=> "Fiji"
# But we still get my system time (여전히 시스템 타임이 출력)
> Time.now
=> 2015-07-04 17:53:37 -0400
# However, if we use `zone` first, we finally get the current time in Fiji (타임존을 등록)
> Time.zone.now
=> Sun, 05 Jul 2015 09:53:42 FJT +12:00
# We can also use `current` to get the same
> Time.current
=> Sun, 05 Jul 2015 09:54:17 FJT +12:00
# Or even translate the system time to application time with `in_time_zone`
> Time.now.in_time_zone
=> Sun, 05 Jul 2015 09:56:57 FJT +12:00
# Let's do the same with Date (we are still in Fiji time, remember?)
# This again is the date on my machine, system date
> Date.today
=> Sat, 04 Jul 2015
# But going through `zone` again, and we are back to application time
> Time.zone.today
=> Sun, 05 Jul 2015
# And gives us the correct tomorrow according to our application's time zone
> Time.zone.tomorrow
=> Mon, 06 Jul 2015
# Going through Rails' helpers, we get the correct tomorrow as well
> 1.day.from_now
=> Mon, 06 Jul 2015 10:00:56 FJT +12:00
$ rails g model user Article title:string body:text
class CreateArticles < ActiveRecord::Migration[6.0]
def change
create_table :articles do |t|
t.string :title
t.text :body
t.timestamps
end
end
end
위 명령어를 사용하면 위와 같은 Migration 파일이 생성된다.
title은 string 타입으로, body는 text 타입으로 테이블이 생성된다.
아래 명령어를 통해 들어가보면
$ rails g model --help
Available field types:
Just after the field name you can specify a type like text or boolean.
It will generate the column with the associated SQL type.
For instance:
`rails generate model post title:string body:text`
will generate a title column with a varchar type and a body column with a text
type. If no type is specified the string type will be used by default.
You can use the following types:
integer
primary_key
decimal
float
boolean
binary
string
text
date
time
datetime
You can also consider `references` as a kind of type.
For instance, if you run:
`rails generate model photo title:string album:references`
It will generate an `album_id` column. You should generate these kinds of fields when
you will use a `belongs_to` association, for instance.
`references` also supports
polymorphism, you can enable polymorphism like this:
`rails generate model product supplier:references{polymorphic}`
For integer, string, text and binary fields, an integer in curly braces will
be set as the limit:
`rails generate model user pseudo:string{30}`
For decimal, two integers separated by a comma in curly braces will be used
for precision and scale:
`rails generate model product 'price:decimal{10,2}'`
You can add a `:uniq` or `:index` suffix for unique or standard indexes
respectively:
`rails generate model user pseudo:string:uniq`
`rails generate model user pseudo:string:index`
You can combine any single curly brace option with the index options:
`rails generate model user username:string{30}:uniq`
`rails generate model product supplier:references{polymorphic}:index`
If you require a `password_digest` string column for use with
has_secure_password, you can specify `password:digest`:
`rails generate model user password:digest`
If you require a `token` string column for use with
has_secure_token, you can specify `auth_token:token`:
`rails generate model user auth_token:token`
그런데 배열 타입의 칼럼을 생성할 수 있지 않을까 하는 의문이 들었다 !
1. migration 파일을 만들어준다.
$ rails g migration Article add_subjects_to_article subjects:text
명령어 설명 - g: generate => g migration 하면 migration 파일을 만들어준다. 예) g controller... , g model ... 등등 - Article: 대신 Table 명 - add_subjects_to_article: 설정하고 싶은 migration 파일 이름 - subjects:text: subjects을 text 타입으로
2. DB가 PostgreSQL인 경우 migration 파일에 다음과 같이 추가해준다.
class AddSubjectsToArticle < ActiveRecord::Migration
def change
add_column :articles, :subjects, :text, array: true, default: []
end
end
여기서 중요한 것은 array: true, default: [] 이다. 이 부분을 직접 작성해준다.
댓글 개