네로개발일기

개발자 네로의 개발 일기, 자바를 좋아합니다 !

'web/Ruby on Rails'에 해당되는 글 6건


반응형

Kaminari를 이용한 Pagination 구현

1. Gem 설치

Gemfile 작성

Gem 'kaminari'
$ bundle install

2. Controller에서 내용 추가

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

이런 식으로 paginate 정의를 해준다.

 

index.html.erb 파일에서 아래 태그를 삽입하면 목록 번호가 뜬다.

<%= paginate @posts %>

 

kaminari에 디자인 템플릿 적용

https://github.com/felipecalvo/bootstrap5-kaminari-views

 

GitHub - felipecalvo/bootstrap5-kaminari-views: Bootstrap 5 compatible styles for Kaminari. Tested on Bootstrap 5.0.1.

Bootstrap 5 compatible styles for Kaminari. Tested on Bootstrap 5.0.1. - GitHub - felipecalvo/bootstrap5-kaminari-views: Bootstrap 5 compatible styles for Kaminari. Tested on Bootstrap 5.0.1.

github.com

kaminari에 디자인 템플릿을 적용할 수 있다.

728x90
반응형
blog image

Written by ner.o

개발자 네로의 개발 일기, 자바를 좋아합니다 !

반응형

Gem

- 라이브러리, 외부 모듈

 

Gem 사용법

1. Gemfile 을 열어 새로 설치할 Gem을 기재한다.

facker Gem을 설치 예제이다.

## Gemfile

gem 'facker'

 

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에서만 작동한다.

 

2) 하나 단위 명시

gem 'pg', :group => :production

 

 

 출처 

https://kbs4674.tistory.com/19

 

Ruby on Rails : Gem 개념

루비온 레일즈의 인기비결 중 하나인 Gem입니다! Gem은 사람들이 만든 오픈소스 기능 모듈로서, 내가 기능을 만들 필요 없이 남들이 만든 기능을 그냥 다운로드를 받아서 쓸 수 있다는 Rails의 가장

kbs4674.tistory.com

 

 

 

728x90
반응형
blog image

Written by ner.o

개발자 네로의 개발 일기, 자바를 좋아합니다 !

반응형

How to list database tables using the "rails console"?

Rails console을 이용해서 데이터베이스 테이블 확인하는 방법

> ActiveRecord::Base.connection.tables

간단하지만 매번 까먹어서 적어놓는다.

728x90
반응형
blog image

Written by ner.o

개발자 네로의 개발 일기, 자바를 좋아합니다 !

반응형

ruby에서 time zone 관련 요약

사용하지 말아야 하는 것 DON'T USE

* Time.now
* Date.Today
* Date.Today.to_time
* Time.parse("2021-10-21 18:19:20")
* Time.strptime(string, "%Y-%m-%dT%H:%M:%S%z")

사용해도 되는 것 DO USE

* Time.current
* 2.hours.ago
* Time.zone.today
* Date.current
* 1.day.from_now
* Time.zone.parse("2020-10-21 18:06:22")
* TIme.strptime(string, "%Y-%m-%dT%H:%M:%S%z").in_time_zone

 

Time zones in Rails

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

 

[출처]

https://thoughtbot.com/blog/its-about-time-zones

 

It's About Time (Zones)

An overview of time zones in Rails.

thoughtbot.com

 

728x90
반응형
blog image

Written by ner.o

개발자 네로의 개발 일기, 자바를 좋아합니다 !

반응형

# rails how to generate model array column

 

model을 만들 때 rails g model 명령어를 사용한다.

$ 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: [] 이다. 이 부분을 직접 작성해준다.

 

2-1. DB가 SQLite3인 경우 app> models> article.rb 에서 

클래스 안에 serialize :subjects, Array 라고 작성한다.

 

3. migrate를 한다.

$ rails db:migrate

 

 

 

 

출처

https://stackoverflow.com/questions/32409820/add-an-array-column-in-rails

 

Add an array column in Rails

How do you declare an array column in Rails? Detail I have the following model rails generate model User address:text but I want a model which can store multiple addresses per user. The following

stackoverflow.com

http://blog.plataformatec.com.br/2014/07/rails-4-and-postgresql-arrays/

 

Rails 4 and PostgreSQL Arrays « Plataformatec Blog

In this post we show how Rails treats PostgreSQL array type, and how to use PL/pgSQL custom functions to do unique validations in PostgreSQL arrays.

blog.plataformatec.com.br

 

추가 (2021.10.23)

코드를 짜다보니 느끼는 거지만 array 칼럼보다는 1:N 연관관계로 설정하는 것이 좋아보인다 !

728x90
반응형
blog image

Written by ner.o

개발자 네로의 개발 일기, 자바를 좋아합니다 !