本篇在教如何將商品加入購物車。(有些人可能會遇到加入購物車後的頁面有出錯的冏境,影片中沒有提到怎麼解決的,我是自己亂試出來的,可以參考看看)
參考影片-第六篇:https://www.youtube.com/watch?v=m7BiZ0dAXh8
加入頁面的讀取權限。
第五篇跟第六篇最後的結果直接寫一起嘍!因為會編輯同樣的檔案。
編輯views/products/index.html.erb,加入藍色那行。(第五篇)
...
<td><%= link_to 'Edit', edit_product_path(product) %></td>
<td><%= link_to 'Destroy', product, method: :delete, data: { confirm: 'Are you sure?' } %></td>
<td><a href="/cart/<%= product.id %>">加入購物車</a></td>
</tr>
<% end %>
...
編輯views/cart/index.html.erb。(第五、六篇)
<h1>你的購物車</h1>
<% if @cart.empty? %>
<p>購物車中沒有任何商品</p>
<% else %>
<%= link_to '清空購物車', cart_clear_path %>
<% end %>
<br/><br/><br/>
<% total = 0 %>
<ul>
<% @cart.each do | id, quantity | %>
<% product = Product.find_by_id(id) %>
<li>
<%= link_to product.title, product %>
<p><%= product.description %></p>
<p><%= number_to_currency(product.price, :unit => '$') %></p>
<p>Quantity: <%= quantity %></p>
</li>
<% total += quantity * product.price %>
<% end %>
<p><strong><%= number_to_currency(total, :unit => '$') %></strong></p>
</ul>
編輯cart_controller.rb,加入權限讀取,限制一定要登入會員後才能讀取頁面,except是指除了[:index]外,其餘action都必須要限制登入才能讀取。(第六篇)
class CartController < ApplicationController
before_action :authenticate_user!, except: [:index]
def add
id = params[:id]
...
end
編輯page_controller.rb,一樣加入權限讀取,跟上方不一樣的是except改成only,only即指只有在[:contact]裡的action才需要做限制。(第六篇)
class PageController < ApplicationController
before_action :authenticate_user!, only: [:contact]
def home
end
...
end
如果頁面在加入購物車後會出錯,請先檢查routes.rb,是否有設定好。
root 'page#home'
devise_for :users
get '/cart' => 'cart#index'
get '/cart/clear' => 'cart#clearCart'
get '/cart/:id' => 'cart#add'
#get 'cart#index'
resources :products
get 'page/about'
get 'page/faqs'
get 'page/contact'
這是我routes.rb的內容,routes.rb裡的內容順序是有意義的哦,我將原本放在中間的root 'page#home'移到最前面後再存檔就能work了,很神奇唄!連我都不大清楚why…會不會是我一開始就沒存檔…購物車的部份就到這邊全部結束。
沒有留言:
張貼留言