Tạo Bookshelf app với Lotus Framework (Phần 3)
lotusrb
11
Ruby
116
White

My Mai viết ngày 29/11/2015

Tiếp tục phần 2 Bây giờ chúng ta đi vào giai đoạn

Tạo database cho app

Cũng như các framework khác việc điều khiển và xử lý các vấn đề liên quan đến database được thông qua Model. Lotus Framework cung cấp Lotus model để giúp thao tác với database.

Lotus Model có 2 khái niệm đó là entityrepository.

  • Entity là nơi để chúng ta define các thông tin về một đối tượng để tạo nên một table cho đối tượng mà bạn muốn quản lýalt text
    Hình trên là những thông tin mà một quyển sách cần thì những attribute cần cho Book entity của chúng ta là gì?
    attributes :image_url, :link, :description, :publisher, :by, :isbn, :year, :pages, :languages, :file_size, :file_type, :created_at, :updated_at

  • Repository là nơi giúp ta quản lý tất cả các query đối với database

    Một số method mà Lotus cung cấp sẵn cho chúng ta như persit, create, delete...
    Tìm hiểu thêm ở link này để biết thêm chi tiết http://lotusrb.org/guides/models/repositories/

Okay, Khi các bạn đã hiểu về ý nghĩa của Entity và Repository rồi thì chúng ta sẽ bắt đầu vào chi tiết.

Config Database

Trước khi bắt tay vào làm mình sẽ hướng dẫn một tí về cách config

Add Gem sqlite3

group :development, :test do
  gem 'sqlite3'
end

Config

# adapter type: :file_system, uri: ENV['BOOKSHELF_DATABASE_URL']

Sửa :file_system thành :sql Nó sẽ trở thành

adapter type: :sql, uri: ENV['BOOKSHELF_DATABASE_URL']

Update .env.development & .env.test

Tại .env.development

BOOKSHELF_DATABASE_URL="file:///db/bookshelf_development"

Sửa file:///db/bookshelf_development thành sqlite://db/bookshelf_development.db

BOOKSHELF_DATABASE_URL="sqlite://db/bookshelf_development.db"

Tại .env.test

BOOKSHELF_DATABASE_URL="file:///db/bookshelf_test"

Edit file:///db/bookshelf_test into sqlite://db/bookshelf_test.db

BOOKSHELF_DATABASE_URL="sqlite://db/bookshelf_test.db"

Rồi xong, bây giờ chúng ta chính thức bắt tay vào làm

Code thôi

Entity

Truy cập lib/bookshelf/entities create book.rb và define các attributes cần thiết của một đối tượng. Ở trong demo này đối tượng của chúng ta là Book

require 'lotus/entity'

class Book
  include Lotus::Entity
  attributes :image_url, :link, :description, :publisher, :by, :isbn, :year,
             :page, :languages, :file_size, :file_type, :created_at, :updated_at
end

Repository

Truy cập lib/bookshelf/repository create book.rb Đây là nơi giúp chúng ta xử lý các query để tương tác với database

require 'lotus/repository'

class BookRepository
  include Lotus::Repository
end

Mapping

Mapping đây là nơi bạn để bạn mapping datatype cho đối tượng Book. Để mapping bạn vào lib/config/mapping.rb

collection :books do
  entity Book
  repository BookRepository

  attribute :id, Integer
  attribute :image_url, String
  attribute :link, String
  attribute :description, String
  attribute :publisher, String
  attribute :by, String
  attribute :isbn, String
  attribute :year, DateTime
  attribute :pages, Integer
  attribute :languages, String
  attribute :file_size, String
  attribute :file_type, Integer
  attribute :created_at, DateTime
  attribute :updated_at, DateTime
end

Tạo Database

Sau khi hoàn tất việc config, tạo entity cho đối tượng Book ta tiếp tục với việc tạo database. Migrate trong Lotus giúp chúng ta làm những công việc này khá nhanh

lotus db create

Sau khi tạo database thành công, ta có generator một migration

Generator table Book

lotus g migration create_books

Tại bookshelf/db/migrations/[prefix]_create_books.rb ta tạo một table book như sau:

collection :books do
  entity Book
  repository BookRepository

  attribute :id, Integer
  attribute :image_url, String
  attribute :link, String
  attribute :description, String
  attribute :publisher, String
  attribute :by, String
  attribute :isbn, String
  attribute :year, DateTime
  attribute :pages, Integer
  attribute :languages, String
  attribute :file_size, String
  attribute :file_type, Integer
  attribute :created_at, DateTime
  attribute :updated_at, DateTime
end

Run migration

lotus db migration

Đã tạo xong Database cho Book app

Tạo data seed

In file db/seed.db

BookRepository.clear
20.times do
    book_attr = {
    image_url: 'http://it-ebooks.org/img/books/wrox/professional_php6.jpg',
    link: 'http://it-ebooks.org/book/wrox/professional_php6',
    description: 'Lorem ipsum dolor sit amet, consectetur adipisicing elit.',
    publisher: 'Wrox',
    by: 'Ed Lecky-Thompson, Steven D. Nowicki',
    isbn: '9780470395097',
    year: DateTime.new(2009),
    pages: 744,
    languages: 'English',
    file_size: '10.2MB',
    file_type: 1,

  created_at: DateTime.new(2015,2,4,4,5,6,'+7'),
  updated_at: DateTime.new(2015,2,4,4,5,6,'+7')
}

  book = Book.new(book_attr)
  BookRepository.persist(book)
end

Define rake task db

Bây giờ ta viết thêm một rake task vào file Rakefile để giúp chúng ta load file db seed tạo data fake cho app
Tại file Rakefile update như sau

require 'rake'
require 'rake/testtask'
require 'lotus/environment'
require Lotus::Environment.new.env_config

Rake::TestTask.new do |t|
  t.pattern = 'spec/**/*_spec.rb'
  t.libs    << 'spec'
end

task default: :test
task spec: :test

namespace :db do
  task :seed do
    load 'db/seed.rb'
  end
end

Kiểm tra data

Ở terminal truy cập vào folder project và gõ lệnh sau

lotus c # để truy cập vào Lotus console

Kiểm tra database

BookRepository.all

Các bạn đã thấy kết quả chưa?

Kết luận

Các bạn có thể xem code tại đây:https://github.com/mymai91/bookshelf/tree/create-seed-data-book

Hy vọng qua bài này có thể chia sẽ được với các bạn rõ hơn về Lotus

Bình luận


White
{{ comment.user.name }}
Bỏ hay Hay
{{comment.like_count}}
Male avatar
{{ comment_error }}
Hủy
   

Hiển thị thử

Chỉnh sửa

White

My Mai

34 bài viết.
186 người follow
Kipalog
{{userFollowed ? 'Following' : 'Follow'}}
Cùng một tác giả
White
23 21
Bạn muốn load 3 image khác nhau (Ý mình ở đây là dùng tag không phải background nhé) cho 3 loại màn hình khác nhau (small, medium, large). Bạn sẽ l...
My Mai viết hơn 3 năm trước
23 21
White
21 8
Lotus là gì? (Link) là một Ruby Web Framework mới với chú trọng vào cấu trúc tách rời với thiết kế đơn giản và dễ hiểu. Hiện tại thì Lotus vừa re...
My Mai viết hơn 3 năm trước
21 8
White
19 9
Tham gia cộng đồng Thoáng đó cũng đã 2 năm từ lúc tớ tham gia cộng đồng Ruby Việt Nam. Giờ ngồi ngẫm lại được gì và mất gì :v Thật thì chẳng mất...
My Mai viết 2 năm trước
19 9
Bài viết liên quan
White
4 2
__Chú thích__: Đây là bản dịch tiếng Việt của bài viết gốc của tôi. Nếu bạn muốn xem bản tiếng Anh, xin hãy trỏ tới URL (Link) Lời mở (Link) là ...
Lơi Rệ viết hơn 3 năm trước
4 2
White
8 1
Tiếp tục bài viết lần trước về (Link) & (Link) bây giờ chúng ta sẽ tìm hiểu thêm cách tạo API từ Lotus Framework. Tại sao lại sử dụng Lotus để tạ...
My Mai viết hơn 3 năm trước
8 1
{{like_count}}

kipalog

{{ comment_count }}

bình luận

{{liked ? "Đã kipalog" : "Kipalog"}}


White
{{userFollowed ? 'Following' : 'Follow'}}
34 bài viết.
186 người follow

 Đầu mục bài viết

Vẫn còn nữa! x

Kipalog vẫn còn rất nhiều bài viết hay và chủ đề thú vị chờ bạn khám phá!