วันศุกร์, มิถุนายน 22, 2550

อ่าน Agile Web Development with Rails ( 7 )

คราวนี้เราจะมาดูเรื่อง cart กันครับ โดยจะเก็บข้อมูล cart ไว้ใน session

Rails เตรียมเรื่องนี้ไว้ให้แล้ว เราสามารถเพิ่ม session เข้าไปใน data model ดังนี้
rake db:sessions:create
จะได้ไฟล์ db/migrate/004_add_sessions.rb ขึ้นมา แล้วก็
rake db:migrate
table ชื่อ sessions จะถูกสร้างขึ้นมาครับ

สิ่งที่เราต้องทำต่อคือ เปิดไฟล์ config/environment.rb เข้าไปปลด # ให้บรรทัดนี้ทำงาน
config.action_controller.session_store = :active_record_store
เพราะ default จะบันทึกข้อมูลใน session ลงไฟล์ครับ

ต้อง restart เว็บเซิร์ฟเวอร์ใหม่ session ถึงจะเริ่มทำงานครับ

ขั้นต่อไปคือการสร้าง data model ของ cart โดยสร้างไฟล์ชื่อ app/model/cart.rb ดังนี้
class Cart
attr_reader :items

def initialize
@items = []
end

def add_product(product)
@items << product
end
end
โปรดสังเกตว่าเราไม่สร้างไฟล์นี้โดย script/generate เพราะอันนั้นใช้สร้างเฉพาะ model ที่เชื่อมต่อกับ table ในฐานข้อมูลโดยตรงครับ กรณีนี้ไม่ใช่ คราวนี้ไปที่ app/controllers/store_controller.rb เพิ่ม 2 method นี้เข้าไป

private
def find_cart
session[:cart] ||= Cart.new
end

def add_to_cart
@cart = find_cart
product = Product.find(params[:id])
@cart.add_product(product)
end

ยังจำได้ไหมครับ ตอนที่แล้ว ใน app/views/store/index.rhtml มีบรรทัดนี้อยู่
<%= button_to "Add to Cart" , :action => :add_to_cart, :id => product %>

ถ้าเราเรียกตอนนี้ก็จะขึ้น error เพราะยังไม่ได้กำหนด view ให้เลย
ก็ต้องสร้างไฟล์ app/views/store/add_to_cart.rhtml

<ul>
<% for item in @cart.items %>
<li><%= h(item.title) %></li>
<% end %>
</ul>

ทีนี้ cart ก็เริ่มใช้งานได้แล้วครับ

ไม่มีความคิดเห็น: