Edited at

Lotusを使った日本で初めてのアプリケーション(Part3)

More than 3 years have passed since last update.

Lotusを使った日本で初めてのアプリケーション(Part1)

Lotusを使った日本で初めてのアプリケーション(Part2)

の続き


Part3(Modelの設定)

今回は、ブログのデータベースを例にModelの設定方法について説明していく。

おそらく、このあたりが一番手がかりが少なくやりにくい部分。

僕は少なくとも相当手こずった。。。

(環境は前回と同じVagrant環境を使う)

より詳細なことはLotus::Modelを参照。

今回は、下記のようなモデルを想定している。

lotus_blog model

※手っ取り早くsqlite3を使用した


migrationファイルを作る

下記のような、migrationファイルを作る


blog_migrate.rb

# -*- coding: utf-8 -*-

require 'bundler/setup'
require 'sqlite3'
require 'lotus/model'
require 'lotus/model/adapters/sql_adapter'

connection_uri = "sqlite://#{__dir__}/lotus_blog.db"

database = Sequel.connect(connection_uri)

database.create_table! :article do
primary_key :id
String :title
String :description
String :content
Integer :is_published, default: 0
DateTime :created_at, :null => false, :default => Sequel::CURRENT_TIMESTAMP

index [:id]
index [:title]
end

database.create_table! :tag do
primary_key :id
String :title

index [:id]
index [:title]
end

database.create_table! :article_tag do
primary_key :id
foreign_key :article_id, :article, :null=>false, :key=>[:id]
foreign_key :tag_id, :tag, :null=>false, :key=>[:id]

index [:article_id], :name=>:article_id
index [:tag_id], :name=>:tag_id
end

require 'fileutils'
FileUtils.mv( "lotus_blog.db", "../lib/")


このファイルを実行する。

$ cd db/

$ ruby blog_migrate.rb

これで、lotus_blog/libに

lotus_blog.dbがlotus_blog/libに作成される。


DBに接続する

それぞれのスキームに接続するために、それぞれentityとrepositoryを指定する。

これによって、DBに対しコマンドを実行していくことができるようになる。

接続する対象DBファイルを


lotus_blog.rb

adapter type: :sql, uri: "sqlite://#{__dir__}/lotus_blog.db"


のように指定してやり、それぞれのスキームにマッピングしていく


lotus_blog.rb

#例

mapping do
collection :article do
entity Article
repository ArticleRepository

attribute :id, Integer
attribute :title, String
attribute :description, String
attribute :content, String
attribute :is_published, Integer
attribute :created_at, DateTime
end
end


ちなみに、


mapping.rb

require "../config/seed.rb"


を入れるとサンプルデータを表示してくれる。

次回は、データを読みだして表示していくところについて解説する。