• 検索結果がありません。

⑦ 複数明細の購入処理への変更対応

ドキュメント内 Rails1.indd (ページ 172-176)

config/routes.rb

セッションとは何か

多くのアプリケーションでは、特定のユーザーがどのような状態にあるかを特定する必要が あります。ショッピングサイトの買い物カゴや、現在ログインしているユーザーのidなど、セッ ションという概念がなければ、ユーザーの識別・認証をリクエストを発行するたびに行わな ければならなくなります。Railsは、ユーザーがアプリケーションに新しくアクセスするとき に自動的にセッションを作成します。ユーザーが既にアプリケーションを使用中であれば、既 存のセッションを読み込みます。

セッションを使うときの3つの注意点について

• データ改竄等の恐れがあるため、秘密情報を保持しないようにしましょう。

• クッキーは4KBまでと決められています。多くの情報を保持するとセキュリティ的にも良 くないので、最小限の情報のみを保持するようにしましょう。

• テキストや画像など平文以外で利用できるオブジェクトについては格納することはでき ないので注意が必要です。

② カートのセッション管理機能の準備

セッション管理の機能を実装していくために、セッション用のテーブルを追加していきましょ う。まず、セッションIDを管理するテーブルとしてCartテーブルとカート内の商品明細を

管理するLineItemテーブルを準備します。追加したテーブルについて、関連性をつける ためにモデルのリレーションの設定、セッション登録・管理を行うメソッドをコントローラに追 加、カート追加がおこなえる機能と画面を作成していきます。

 Cartモデル・LineItemモデルの関係性は上の図のようになります。

Cartテーブルの追加

コントローラに保持しているセッションを管理するためだけなので、

id

(integer)のみを 用意しましょう。

username:~/workspace (master) $ rails generate scaffold Cart Running via Spring preloader in process 5800

Expected string default value for '--jbuilder'; got true (boolean) invoke active_record

create db/migrate/20161227043247_create_carts.rb create app/models/cart.rb

invoke rspec

create spec/models/cart_spec.rb invoke resource_route

route resources :carts invoke scaffold_controller

create app/controllers/carts_controller.rb invoke erb

create app/views/carts

create app/views/carts/index.html.erb create app/views/carts/edit.html.erb create app/views/carts/show.html.erb create app/views/carts/new.html.erb create app/views/carts/_form.html.erb invoke rspec

create spec/controllers/carts_controller_spec.rb create spec/views/carts/edit.html.erb_spec.rb create spec/views/carts/index.html.erb_spec.rb create spec/views/carts/new.html.erb_spec.rb create spec/views/carts/show.html.erb_spec.rb create spec/routing/carts_routing_spec.rb invoke rspec

create spec/requests/carts_spec.rb invoke helper

create app/helpers/carts_helper.rb invoke rspec

create spec/helpers/carts_helper_spec.rb invoke jbuilder

create app/views/carts/index.json.jbuilder create app/views/carts/show.json.jbuilder create app/views/carts/_cart.json.jbuilder invoke assets

invoke coffee

create app/assets/javascripts/carts.coffee invoke scss

create app/assets/stylesheets/carts.scss invoke scss

identical app/assets/stylesheets/scaffolds.scss



LineItemテーブルの追加

関連以外に商品の個数を管理できるように、

quantity

(integer)を用意しましょう。

username:~/workspace (master) $ rails generate scaffold

LineItem product:references cart:references quantity:integer Running via Spring preloader in process 5816

Expected string default value for '--jbuilder'; got true (boolean) invoke active_record

create db/migrate/20161227044258_create_line_items.rb create app/models/line_item.rb

invoke rspec

create spec/models/line_item_spec.rb invoke resource_route

route resources :line_items invoke scaffold_controller

create app/controllers/line_items_controller.rb invoke erb

create app/views/line_items

create app/views/line_items/index.html.erb create app/views/line_items/edit.html.erb create app/views/line_items/show.html.erb create app/views/line_items/new.html.erb create app/views/line_items/_form.html.erb invoke rspec

create spec/controllers/line_items_controller_spec.rb create spec/views/line_items/edit.html.erb_spec.rb create spec/views/line_items/index.html.erb_spec.rb create spec/views/line_items/new.html.erb_spec.rb create spec/views/line_items/show.html.erb_spec.rb create spec/routing/line_items_routing_spec.rb invoke rspec

create spec/requests/line_items_spec.rb invoke helper

create app/helpers/line_items_helper.rb invoke rspec

create spec/helpers/line_items_helper_spec.rb invoke jbuilder

create app/views/line_items/index.json.jbuilder create app/views/line_items/show.json.jbuilder

create app/views/line_items/_line_item.json.jbuilder invoke assets

invoke coffee

create app/assets/javascripts/line_items.coffee invoke scss

create app/assets/stylesheets/line_items.scss invoke scss

個数について初期値を追加

railsgeneratescaffoldで作成されたマイグレーションファイルを修正しましょう。

db/migrate/20161227044258_create_line_items.rb

ドキュメント内 Rails1.indd (ページ 172-176)

関連したドキュメント