[RUBY] Conception de table (en utilisant Active Hash)

Aperçu

Cette fois, j'ai conçu le tableau pour créer un site clone pour l'application Furima. Comme c'est la première fois que je le fabrique moi-même, la qualité de la conception de la table n'est toujours pas claire, mais pour le moment, veuillez la négliger en tant que sortie ...

Diagramme ER

C'est devenu comme ça. テーブル設計.png

Le but est de préparer un fichier en utilisant Active Hash pour la pièce à sélectionner à partir des données existantes. L'état du produit, la préfecture du lieu de livraison au moment de l'achat, etc. Concernant la table prefectures (active_hash) qui représente la préfecture, nous utilisons deux lieux, la source d'expédition et la destination.

Comment utiliser Active Hash

Installation

Mettez ce qui suit dans le Gemfile et l'installation du bundle.

Gemfile


gem 'active_hash'

Créez maintenant un modèle pour Active Hash. ⚠︎ Créez votre propre modèle qui hérite d'ActiveHash :: Base au lieu de le créer avec des commandes dans le terminal ⚠︎

Description du fichier

À titre d'exemple, prenons un fichier de catégorie.

app/models/category.rb


class Category < ActiveHash::Base
  self.data = [
    {id: 1, name: '---'},{id: 2, name: 'Femmes'},{id: 3, name: 'Pour des hommes'},{id: 4, name: 'Bébé / Enfants'},{id: 5, name: 'Intérieur / maison / accessoires'},{id: 6, name: 'Livres / musique / jeux'},{id: 7, name: 'Jouets, articles de loisirs'},{id: 8, name: 'Appareils ménagers, smartphones, appareils photo'},{id: 9, name: 'sport, loisirs'},{id: 10, name: 'Fait main'},{id: 11, name: 'Autre'}
  ]
end

README

De plus, le README de la table et de l'association conçue cette fois est le suivant.

README.md


#Conception de table

##table des utilisateurs
| Column      | Type   | Options     |
| ----------- | ------ | ----------- |
| nickname    | string | null: false |
| email       | string | null: false |
| password    | string | null: false |
| first_name  | string | null: false |
| family_name | string | null: false |
| read_first  | string | null: false |
| read_family | string | null: false |
| birth       | date   | null: false |

### Association

- has_many :products
- has_many :item_purchases
- has_many :comments

##table des produits
| Column              | Type       | Options     |
| ------------------- | ---------- | ----------- |
| photo               | text       | null: false |
| name                | string     | null: false |
| explanation         | text       | null: false |
| category            | integer    | null: false |
| condition           | integer    | null: false |
| postage_type        | integer    | null: false |
| prefectures         | integer    | null: false |
| preparation_days    | integer    | null: false |
| value               | integar    | null: false |
| user                | references | null: false | 


### Association

- belongs_to :user
- has_one :item_purchase
- has_many :comments
- belongs_to_active_hash :category
- belongs_to_active_hash :condition
- belongs_to_active_hash :postage_type
- belongs_to_active_hash :prefectures
- belongs_to_active_hash :preparation_days
- belongs_to :seller, class_name: "User"


## item_table d'achats
| Column        | Type    | Options                        |
| ------------- | ------- | ------------------------------ |
| product       | integer | null: false, foreign_key: true |
| user          | integer | null: false, foreign_key: true |
| purchase_info | integer | null: false, foreign_key: true |

### Association

- belongs_to :user
- belongs_to :product
- belongs_to :purchase_info


##tableau des commentaires
| Column  | Type       | Options                        |
| ------- | ---------- | ------------------------------ |
| content | string     | null: false                    |
| user    | integer    | null: false, foreign_key: true |
| product | integer    | null: false, foreign_key: true |

### Association

- belongs_to :product
- belongs_to :user

## purchase_table d'informations

| Column        | Type       | Options                        |
| ------------- | ---------- | ------------------------------ |
| postal_code   | string     | null: false                    |
| prefectures   | integer    | null: false, foreign_key: true |
| city          | string     | null: false                    |
| address       | string     | null: false                    |
| building_name | string     |                                |
| phone_number  | string     | null: false                    |
| item_purchase | integer    | null: false, foreign_key: true |

### Association

- has_one_active_hash :prefectures
- has_one :item_purchase

Notez la dépendance entre has_one et appartient_to ici.

Si vous avez besoin d'une clé externe, vous devez avoir une association avec appartient_to.

Enfin, la première auto-implémentation a pris beaucoup de temps, mais c'était amusant. Cependant, il a fallu environ 10 heures pour le faire aujourd'hui, alors je ferai de mon mieux pour ne pas être frustré ...

Recommended Posts

Conception de table (en utilisant Active Hash)
[Rails] À propos du hachage actif
[Rails] Présentation de Active Hash
Utilisation de Active Hash
Les pièges d'Active Hash
gem active_hash À propos du hachage actif
J'ai essayé d'expliquer Active Hash