Help us understand the problem. What is going on with this article?

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

More than 5 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"

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

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

yamadagenki
プロダーツプレイヤーやっています。 趣味でプログラミングやっているので、それ関連のことを書きます。
https://yamadagenki.github.io/xushengbo/
ventus
スポーツ選手の電子トレーディングカードサービスwhooop!を開発・運営するスタートアップ
https://whooop.jp/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away