ผลต่างระหว่างรุ่นของ "418342 ภาคปลาย 2552/ปฏิบัติการที่ 11"
ไปยังการนำทาง
ไปยังการค้นหา
Cardcaptor (คุย | มีส่วนร่วม) |
Cardcaptor (คุย | มีส่วนร่วม) |
||
แถว 21: | แถว 21: | ||
end | end | ||
+ | </geshi> | ||
+ | |||
+ | == สร้างหน้า Search == | ||
+ | ต่อไปเราจะทำการสร้างหน้าสำหรับให้ผู้ใช้คนหาสินค้า อันดับแรกให้เพิ่มเมธอด search ใน ProductController | ||
+ | |||
+ | <geshi lang="rails"> | ||
+ | # GET /products/search?name=abc | ||
+ | # POST /products/search?name=abc | ||
+ | def search | ||
+ | if not params[:name].blank? | ||
+ | @product = Product.find_by_name(params[:name]) | ||
+ | respond_to do |format| | ||
+ | if @product | ||
+ | flash[:notice] = "Product found!" | ||
+ | format.html { redirect_to(@product) } | ||
+ | format.xml { render :xml => @product } | ||
+ | else | ||
+ | format.html { flash[:notice] = "<font color=red>Product not found!</font>" } | ||
+ | format.xml { render :xml => @product.errors, :status => :unprocessable_entity } | ||
+ | end | ||
+ | end | ||
+ | end | ||
+ | end | ||
</geshi> | </geshi> |
รุ่นแก้ไขเมื่อ 01:55, 5 กุมภาพันธ์ 2553
ในปฏิบัติการนี้เราจะใช้ AJAX ในการทำ autocomplete ซึ่งหมายถึงตอนที่มีการพิมพ๋ข้อความในฟอร์ม ตัวเวบแอพพลิเคชันช่วยเลือกคำที่เราต้องการพิมพ์ให้
เนื้อหา
เริ่มสร้างแอพพลิเคชัน
เราจะสร้างแอพพลิเคชันของสินค้า โดยสินค้าแต่ละอย่างจะมีสมบัติสองอย่างคือ ชื่อ (name) และราคา (price)
> rails shop > cd shop > ruby script/generate scaffold product name:string price:decimal > rake db:migrate
ลงปลั๊กอิน auto_complete
โค้ดส่วนที่จะช่วยเราทำ autocomplete นั้นอยู่ในปลั๊กอินชื่อ auto_complete เราสามารถลงปลั๊กอินนี้ด้วยการสั่ง
> ruby script/plugin install auto_complete
แก้ไข controller ของ Product
สมมติว่าเราต้องการให้มีการทำ autocomplete ของฟีลด์ name ให้เราแก้ไข ProductController ดังต่อไปนี้ <geshi lang="rails"> class ProductsController < ApplicationController
auto_complete_for :product, :name
...
end </geshi>
สร้างหน้า Search
ต่อไปเราจะทำการสร้างหน้าสำหรับให้ผู้ใช้คนหาสินค้า อันดับแรกให้เพิ่มเมธอด search ใน ProductController
<geshi lang="rails">
# GET /products/search?name=abc # POST /products/search?name=abc def search if not params[:name].blank? @product = Product.find_by_name(params[:name]) respond_to do |format| if @product flash[:notice] = "Product found!" format.html { redirect_to(@product) } format.xml { render :xml => @product } else format.html { flash[:notice] = "Product not found!" } format.xml { render :xml => @product.errors, :status => :unprocessable_entity } end end end end
</geshi>