This time, I designed the table to create a clone site for flea market apps. Since I made it myself for the first time, the quality of the table design is still unclear, but for the time being, please overlook it as an output ...
It became like this.
The point is to prepare a file using Active Hash for the part to be selected from the existing data. The condition of the product, the prefecture of the delivery destination at the time of purchase, etc. Regarding the prefectures (active_hash) table that represents prefectures, we use two locations, the shipping source and the destination.
Put the following in the Gemfile and bundle install.
Gemfile
gem 'active_hash'
Now create a model for Active Hash. ⚠︎ Create your own model that inherits ActiveHash :: Base instead of creating it with commands in the terminal ⚠︎
As an example, let's take a category file.
app/models/category.rb
class Category < ActiveHash::Base
self.data = [
{id: 1, name: '---'},{id: 2, name: 'Women'},{id: 3, name: 'mens'},{id: 4, name: 'Baby / Kids'},{id: 5, name: 'Interior / house / accessories'},{id: 6, name: 'Books / music / games'},{id: 7, name: 'Toys, hobbies and goods'},{id: 8, name: 'Home appliances, smartphones, cameras'},{id: 9, name: 'sport, leisure'},{id: 10, name: 'Handmade'},{id: 11, name: 'Other'}
]
end
README
In addition, the README of the table and association designed this time is as follows.
README.md
#Table design
##users table
| 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
##products table
| 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_purchases table
| 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
##comments table
| 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_info table
| 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
Note the dependency between has_one and belongs_to here.
If you need a foreign key, you need to have an association with belongs_to.
Last but not least, the first self-implementation took a lot of time, but it was fun. However, it took about 10 hours just to do this today, so I will do my best not to be frustrated ...