Rails で商品とカテゴリ

商品とカテゴリ

Ruby on Rails で販売しない EC サイトを作ってみた - div1に上がりたいkeitanxkeitanの日記 で作った EC サイトの改良。
商品ごとにカテゴリを設定して、カテゴリごとに商品を一覧できるようにしたい。
管理者がカテゴリを追加したり削除したりできるようにしたいので、カテゴリはモデルということになる。
今回は商品ごとにカテゴリを設定できるようにするところまで。

結論から書くとカテゴリと商品とを has_many, belongs_to 関係とで関連付けた。
Ruby on Rails チュートリアル:実例を使って Rails を学ぼう の第10章に詳しい。

手順

Product モデルは既にあるので、Category モデルを作る。

$ rails generate model Category name:string

Product モデルと Category モデルとを関連付けるためのマイグレーションを作成。

$ rails generate migration AddCategoryIdToProducts

category_id を追加。

class AddCategoryIdToProducts < ActiveRecord::Migration
  def self.up
    add_column :products, :category_id, :integer
    add_index :products, :category_id
  end

  def self.down
    remove_index :products, :column => :category_id
    remove_column :products, :category_id
  end
end

マイグレート。

$ bundle exec rake db:migrate

あとは関連付けを行うだけ。

商品がカテゴリに所属する (belongs_to) 関連付け。

class Product < ActiveRecord::Base
  belongs_to :category
  .
  .
  .
end

カテゴリが商品を複数所有する (has_many) 関連付け。

class Category < ActiveRecord::Base
  has_many :products
  .
  .
  .
end

has_many, belongs_to による関連付けを RailsAdmin がよしなに扱ってくれる

RailsAdmin でいくつかカテゴリを追加してから、商品の編集画面を見てみると

f:id:keitanxkeitan:20140529002914p:plain

となっていていい感じ。
ちなみに RailsAdmin の設定で編集画面をカスタマイズしている場合は

  rails_admin do
    edit do
      .
      .
      .
      field :category # category_id ではないので注意!
    end
  end

と記述しておけば OK。

WeddingMessenger を Rails で実装して使いやすくしてみた

Heroku アプリとして

友人の結婚式に際して Twilio を使って祝電を集めてみた - div1に上がりたいkeitanxkeitanの日記 で Twilio を使って祝電を集めるアプリケーションを作ったことを書いたけれど、実装のスピードを重視して PHP で実装していた。

このままだとせっかく GitHub で公開していても使いにくいと思ったので、最近勉強した Ruby on Rails を使って実装して、Heroku にデプロイして使うような形で公開してみた。

keitanxkeitan/WeddingMessenger · GitHub

 

f:id:keitanxkeitan:20140525022634p:plain

 

Twilio アカウントと Heroku アカウントがあればどなたでも簡単に使っていただけます。

導入手順は GitHub を参照のこと。

 

展望

  • 管理画面では絞り込みなどできないので、AngularJS を使って実現してみたい
  • ユーザーモデルを作ってウェブアプリケーション化してみたい

Rails + Heroku 楽しいなー!