• 日本語
    • English (英語)
Avinton JapanAvinton JapanAvinton JapanAvinton Japan
  • サービス
    • Avinton Data Platform
    • エッジ AIカメラ
    • AIサービス開発
    • 画像認識PoC
  • 最新情報
  • アカデミー
  • 採用情報
    • Avintonで働く魅力
    • 求人
    • よくある質問
  • 企業情報
    • 会社概要
    • 代表からご挨拶
    • CSR(企業の社会的責任)
  • お問い合わせ

カート機能作成

  • Python3.6 と OpenCV のインストール (Ubuntu18.04LTS)
  • ルーティング
  • 見た目を美しくしてみましょう
  • NAT
  • 三目並べ – 2.〇×を交互にゲーム盤に入るようにしよう
  • カート内のアイテム個数を変更
  • 三目並べ – 3.勝敗がつくようにしよう
  • EC2からS3へ自動でぽいぽいアップロードするスクリプトの作成
  • 三目並べ – 4.「スタート」「リセット」ボタンをつけよう
  • 三目並べ – 5.先攻後攻を決めて、コンピュータ対戦にしよう(前編)
  • カートの設置
  • Ruby on Rails を MySQLでセットアップ
  • レイアウト調整
  • 機械学習入門者向け Support Vector Machine (SVM) に触れてみる
  • AWSアカウントの作成と必ずやるべきセキュリティ対策
  • VLAN
  • テスト
  • 機械学習を用いた画像分類
  • Ruby on Railsによる簡単なウェブアプリケーション
  • 正規表現とパイプ
  • 機械学習エンジニアに必要なスキル
  • Ubuntuの設定
  • PostgreSQL Setup
  • REDIS
  • Amazon EC2 インスタンスの初期設定をしよう
  • Pythonの設定
  • GNS3のセットアップ
  • viエディタ
  • AWSのEC2インスタンスでWordPressブログを公開してみよう
  • Pythonでデータベースを操作する
  • Python2.7とOpenCVのインストール
  • ファイル操作コマンド
  • OpenCVのテストプログラム
  • グループとユーザー
  • Pythonで画像を分類するプログラムを作成する
  • AWS CLIをインストールしてコマンド操作しよう
  • Virtualisation and Container (仮想化とコンテナ) – Ansible, Docker and Kubernetes
  • Windows Server 2012 R2 Hyper-V
  • 困った時に使うコマンド
  • PacketTracerのセットアップ
  • 一般グループのユーザーとグループ
  • AWS Route 53を使って独自ドメインのWebページを表示させてみよう
  • プライバシーポリシー
  • VMware ESXi サーバー構築
  • 三目並べ – 6.先攻後攻を決めて、コンピュータ対戦にしよう(後編)
  • フロントエンド開発のための環境構築
  • フロントエンドのデモンストレーション
  • APIのデモンストレーション
  • CISCO 1800ルータセットアップ
  • ファイル検索コマンド
  • ESXi – Switchの追加とVLAN
  • 質問
  • 仮想化環境のディスク容量を拡張する
  • ユーザー権限とアクセス権
  • 三目並べ – 0.導入
  • テキスト処理
  • ESXi - VyOS
  • データベースへのデータロード
  • 機械学習入門者向け Naive Bayes(単純ベイズ)アルゴリズムに触れてみる
  • CCNA
  • ESXi – 小規模ネットワーク 構築
  • ファイル管理
  • 機械学習入門者向け ChainerRLでブロック崩しの学習
  • AWS CLIを使ってEC2のファイルをS3へアップロードしよう
  • CSV import & export – Node.js, mySQL – 1
  • 機械学習入門者向け ランダムフォレストによる Kaggle Titanic生存者予測
  • CSV import & export – Node.js, mySQL – 2
  • PCからルータ、スイッチへのSSH接続設定
  • 【Python入門】Python Numpy チュートリアル
  • SQL 便利な関数
  • PostgreSQLによるデータ分析
  • 機械学習入門者向け 分類と回帰の違いをプログラムを書いて学ぼう
  • NodeJSでWebアプリケーション開発 – React編
  • Pythonによるマルチスレッドプログラミング実践
  • Certbotを使ってSSL証明書を発行し、HTTP通信を暗号化しよう
  • DockerとApacheを使ってWebサーバーを構築しよう
  • NodeJSでWebアプリケーション開発 – React編
  • Ruby on Rails インストール
  • AmazonEC2とVPCでネットワークとサーバーを構築しよう
  • AWS入門者向け 初心者が最初に理解すべきEC2とVPCの基本的な用語解説
  • Linuxとは
  • Pandasによる構造化データ分析
  • カート機能作成
  • Ruby on Rails Academy
  • ショッピングアプリケーション作成
  • ダイナミックルーティング
  • PostgreSQL – Python – Apache – Bootstrap
  • 三目並べ – 1.ゲーム盤を作ろう
Home Academy カート機能作成

Ruby on Rails Academy #6

カート作成

商品のリストは大方できたので、次はカートの作成にとりかかりましょう。

rails generate scaffold Cart

でカートを作成します。
scaffoldはView、Controller、Model(+ルーティング)をまとめた雛形を作成してくれるRailsの機能で、全機能が必要な場合は非常に便利な機能です。ここからはこちらも適宜使っていきます。

モデルを作成したのでmigrateもしましょう

rails db:migrate

カートは、とりあえずのところ、セッションで管理します。セッションが始まった時にカートを作成するmoduleを作成します。

app/controllers/concerns/current_cart.rbを作り

module CurrentCart
private
def set_cart
@cart = Cart.find(session[:cart_id])
rescue ActiveRecord::RecordNotFound
@cart = Cart.create
session[:cart_id] = @cart.id
end
end

exercise 1

ターミナルでscaffoldのログを確認し、できたファイルの構成と中身を確認しましょう。
また、rescueについて調べ、CurrentCartで何が起こっているか理解しましょう。

カートの中身

さて、これでカートはできましたが、どのようにしてカートとその中のいくつかの商品を管理したらよいでしょうか。
カートに商品のカラムを作ると商品の数だけカラムが必要ですし、品目をどんどん足していくにしても取り出すときにまた分割しなければなりません。
ここでは、 LineItem(項目)というモデルを作り、カートは個々のカートの識別に使い、中身はカートに紐付けられたLineItemで管理するのがよいでしょう。
railsには has_one, has_many, belongs_to といったモデルの依存関係を作る関数が用意されていますので、これらを用いて実現できます。

まず、LineItemを作りましょう

rails generate scaffold LineItem item:references cart:belongs_to

今度はまた新たな宣言が加わっています。
line_item.rb を見てみましょう。 belongs_to という設定が追加されているかと思います。
これらは、データベースではFOREIGN KEYといって紐付けられた他のテーブルの内容を参照できる機能です。
確認したら、migrateしましょう。

先ほどの set_cart と LineItemを作るコードを line_items_controller.rb に下記を加えます。

include CurrentCart
before_action :set_cart, only: [:create]
before_action :set_line_item, only: [:show, :edit, :update, :destroy]

...

def create
item = Item.find(params[:item_id])
@line_item = @cart.line_items.build()

...

private
def set_line_item
@line_item = LineItem.find(params[:id])
end

...

今度はカート側にLineItemとの関係を書き加えます。
カートは複数のLineItemを持つことができ、Cartが削除された際には中身のLineItemも削除されるべきです。

cart.rb

has_many :line_items, dependent: :destroy

また、ItemとLineItemの関係も必要です。

exercise 2

・「カートに追加する」ボタンを配置しましょう(現状はカート用ページに飛んで構いません)。
・Itemは複数のLineItemを持ちうる
・LineItemが存在している間は該当のItemを削除できない(before_[action_name] を用います)
上記二つを実装し、
・「LineItemが存在しているItemを削除しようとすると失敗する」テストを書いてください。

カートの表示

ここまででカートに関するロジックは揃ってきました。実際にそれを使っていきます。
まず、カートにジャンプする基となるページは「編集」や「削除」などのないユーザーページから行うのでそれをStoreとして作ります。

rails generate controller Store index

Storeにモデルは必要ないのでcontrollerだけ作ります。

exercise 3

・Storeのインデックスページをサイトのルートページに設定してください。

exercise 4

・ボタンが押された時に、しっかりline_itemが作られるか確認するテストをline_items_controller_test.rbに追加しましょう。

exercise 5

・カートが期待通りの動作をすることを確認しましょう。
・カートに追加された際の表示メッセージを変更しましょう。
・いくつか実際に追加されたら、関連モデルの内容をどのような表現で参照できるかrails consoleから確認しましょう。

exercise 6

・セッションにカウンターを追加し、2回目以降のアクセスの場合、「Hi, again!」と表示されるようにしてください。

前へ
次へ

採用情報

採用情報

Search

タグ

2017 2018 AI Avinton Avinton Academy Avinton Japan Avintonジャパン DX HTML Linux Python Ruby Webエンジニア アビントン アビントンジャパン アヴィントン アヴィントンジャパン イベント インフラエンジニア エンジニア グローバル サーバーエンジニア データサイエンス データサイエンティスト データベース データ解析 ニュービジネス研究会 ネットワークエンジニア ビックデータ ベンチャー 勉強会 就活 就職活動 成長 技術インターン 採用 新規事業 横浜 機械学習 機械学習エンジニア 派遣 第二新卒 経営者交流会 英語 起業
© 2020 Avinton | All Rights Reserved | プライバシーポリシー
  • サービス
    • Avinton Data Platform
    • エッジ AIカメラ
    • AIサービス開発
    • 画像認識PoC
  • 最新情報
  • アカデミー
  • 採用情報
    • Avintonで働く魅力
    • 求人
    • よくある質問
  • 企業情報
    • 会社概要
    • 代表からご挨拶
    • CSR(企業の社会的責任)
  • お問い合わせ
  • 日本語
    • English (英語)
Avinton Japan