Upgrade to Pro — share decks privately, control downloads, hide ads and more …

RailsプロジェクトにVuex-ORMを導入した話

mopinfish
December 11, 2019

 RailsプロジェクトにVuex-ORMを導入した話

LegalForce社で行われたRuby勉強会にてLT枠で発表した際の資料です。
RailsプロジェクトにてVuex-ORMというライブラリを利用したのでその感想を共有させていただきました。

https://legalforce.connpass.com/event/154895/

mopinfish

December 11, 2019
Tweet

Other Decks in Programming

Transcript

  1. 自己紹介
 名前 
 大塚昇
 経歴
 2010.04- 不動産投資物件ポータルサイトのエンジニア
 2019.04- フリーランスエンジニアに転向
 2019.04-10

    不動産投家向けの資産シミュレーションツールの開発に従事
 2019.04-12 注文住宅ポータルサイトの開発に従事
 2020.01- GIS関連の会社に転職(予定)
 
 今日はこのPJで利用したライブ ラリについて話します
  2. Vuex-ORMとは
 • Vuex-ORMは Kia King Ishi氏によって開発されたライブラリ
 • フロントエンドにとってのORM
 • 「VuexのStoreをストレージとして使うActiveRecord」のようなイメージ


    • 詳しくは製作者の下記の記事を参照
 Vuexでリレーションを持った複雑なデータ構造を上手く扱うには
 https://qiita.com/kiaking/items/bcd5360fb3106cf22a81

  3. Vuex-ORMの基本操作:モデルの作成
 import { Model } from 'vuex-orm' class User extends

    Model { // Vuexのステートのキー名を指定する。 static entity = 'users' // ユーザデータの構造とリレーションを定義する。 static fields () { return { id: this.attr(null), name: this.attr(''), age: this.number(0), posts: this.hasMany(Post, 'user_id') } } }
  4. Vuex-ORMの基本操作:リレーションの設定
 class Post extends Model { static entity = 'posts'

    static fields () { return { id: this.attr(null), user_id: this.attr(null), title: this.attr(''), body: this.attr(''), author: this.belongsTo(User), comments: this.hasMany(Comment) } } }
  5. Vuex-ORMの基本操作:データ更新
 this.$store.dispatch('entities/users/create', { data: { name: "yamada taro", age: 24.

    posts: [ { title: "title1", body: "body1" }, { title: "title2", body: "body2" }, ] } })
  6. Vuex-ORMによるフロントでのモデル復元の実例
 beforeMount() { const data = JSON.parse(this.$el.getAttribute("data")) , userData =

    data['user'] // Userモデルを構築する this.$store.dispatch('entities/users/create', { data: userData }) }