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で作成されたマイグレーションファイルを修正しましょう。