ผลต่างระหว่างรุ่นของ "418342 ภาคปลาย 2552/ปฏิบัติการที่ 5"

จาก Theory Wiki
ไปยังการนำทาง ไปยังการค้นหา
แถว 68: แถว 68:
 
'''ข้อสังเกต'''
 
'''ข้อสังเกต'''
 
* ผู้ใช้สามารถป้อนเพียงแค่ส่วนหนึ่งของชื่อก็ได้ เราแนะนำให้เวลาคุณทำการค้นหาด้วยคำสั่ง find จงใช้เครื่องหมาย GLOB ซึ่งอนุญาตให้คุณใส่ชื่อที่ต้องการค้นหาเป็น *abc* โดยที่ * แต่ละตัวแสดงถึงตัวอักษรตัวกี่ตัวก็ได้ เหมือนกับตอนที่คุณใช้ wildcard ใน shell ของระบบปฏิบัติการต่างๆ คุณสามารถดูรายละเอียดของเครื่องหมาย GLOB ได้ที่ [http://www.sqlite.org/lang_expr.html http://www.sqlite.org/lang_expr.html]
 
* ผู้ใช้สามารถป้อนเพียงแค่ส่วนหนึ่งของชื่อก็ได้ เราแนะนำให้เวลาคุณทำการค้นหาด้วยคำสั่ง find จงใช้เครื่องหมาย GLOB ซึ่งอนุญาตให้คุณใส่ชื่อที่ต้องการค้นหาเป็น *abc* โดยที่ * แต่ละตัวแสดงถึงตัวอักษรตัวกี่ตัวก็ได้ เหมือนกับตอนที่คุณใช้ wildcard ใน shell ของระบบปฏิบัติการต่างๆ คุณสามารถดูรายละเอียดของเครื่องหมาย GLOB ได้ที่ [http://www.sqlite.org/lang_expr.html http://www.sqlite.org/lang_expr.html]
 +
 +
* คุณจะต้องพิมพ์จำนวนผลลัพธ์ที่ค้นหาได้ทั้งหมด เสร็จแล้วจึงแสดงผลการค้นหาแค่ 100 ผลแรกเท่านั้น คุณสามารถนับจำนวนผลการค้นหาทั้งหมดโดยใช้คำสั่ง count ซึ่งคุณสามารถดู documentation ของมันได้ที่นี่ [http://api.rubyonrails.org/classes/ActiveRecord/Calculations/ClassMethods.html#M002187 http://api.rubyonrails.org/classes/ActiveRecord/Calculations/ClassMethods.html#M002187]

รุ่นแก้ไขเมื่อ 21:41, 3 ธันวาคม 2552

ในปฏิบัติการนี้ เราจะสร้าง model, controller, และ view อย่างง่ายๆ สำหรับค้นหาข้อมูลในฐานข้อมูลของนักดนตรีสากล

สร้าง Rails Application และ Model

ให้คุณสร้าง rails application ชื่อ music ขึ้นมาใน directory หนึ่ง

หลังจากนั้นเราจะสร้าง model ชื่อ artist ด้วยการสั่ง

ruby script/generate model artist

แล้วจงไปแก้ไขไฟล์ migration ที่ชื่อ db/migrate/<<timestamp>>_create_artists.rb เพื่อให้ในตารางมีฟีลด์ดังต่อไปนี้

ชื่อ ชนิด
name string
origin string
genre string
homepage string
album text
track string

หลังจากนั้นให้สั่งให้ migration ทำงานด้วยคำสั่ง

rake db:migrate

เพื่อความสะดวก เราได้เตรียมฐานข้อมูลที่มีข้อมูลนักดนตรีเอาไว้ให้คุณแล้ว ให้คุณดาวน์โหลดไฟล์ development.sqlite3 แล้วนำมันไปแทนที่ไฟล์ development.sqlite3 ที่ rails สร้างไว้ในไดเรคทอรี db

หมายเหตุ: ไฟล์ development.sqlite3 นี้สร้างขึ้นมาจากข้อมูลนักดนตรีของ http://www.freebase.com (คุณสามารถดาวน์โหลดไฟล์์ต้นฉบับได้จาก http://download.freebase.com/datadumps/2009-10-01/browse/music/ โดยเอาไฟล์ชื่อ artist.tsv)

เขียนหน้าเว็บสำหรับแสดงผลศิลปินแต่ละคน

จงสร้าง controller ชื่อ artists

หลังจากนั้นไปแก้ไข ArtistsController ในไฟล์ app/controllers/artists_controller.rb โดยทำการเพิ่ม action ชื่อ show

Action show นี้ เมื่อเราเข้าถึงมันผ่าน url http://localhost:3000/artists/show/<<id ของศิลปิน>> แล้วจะต้องแสดงข้อมูลของศิลปินตาม screenshot ข้างล่างนี้

Lab-05-show.png

ข้อสังเกต:

  • มีฟีล์ที่เราต้องแสดงผลอยู่ทั้งหมด 7 ฟีลด์ ได้แต่ name, origin, genre, label, homepage, album, และ track แต่ screenshot ข้างบนแสดงให้เห็นถึงแค่ album เท่านั้น เนื่องจากพื้นที่ไม่พอ
  • ฟีลด์ genre, label, homepage, album, และ track นั้นความจริงแล้วเป็นลิสต์ของข้อมูล ในฐานข้อมูลจะเก็บเป็น string และ text ขนาดใหญ่ ซึ่งระหว่างข้อมูลแต่ละตัวจะมี comma (,) ขั้นอยู่ คุณจะต้องเขียนโปรแกรมเพื่อแปลงลิสต์ของข้อมูลในรูปแบบนี้ให้เป็น unordered list (ul ในภาษา HTML)

เขียนหน้าเว็บสำหรับค้นหาศิลปินตามชื่อ

หลังจากนั้นจะสร้าง action ชื่อ name_search ใน controller artists

หน้าเว็บเพจของ name_search จะอนุญาตให้ผู้ใช้ค้นหาศิลปินโดยป้อนชื่อหรือส่วนหนึ่งของชื่อของศิลปินที่คุณต้องการ โดยมันจะต้องแสดงผลตาม screenshot ข้างล่างนี้

Lab-05-name search.png

ข้อสังเกต

  • ผู้ใช้สามารถป้อนเพียงแค่ส่วนหนึ่งของชื่อก็ได้ เราแนะนำให้เวลาคุณทำการค้นหาด้วยคำสั่ง find จงใช้เครื่องหมาย GLOB ซึ่งอนุญาตให้คุณใส่ชื่อที่ต้องการค้นหาเป็น *abc* โดยที่ * แต่ละตัวแสดงถึงตัวอักษรตัวกี่ตัวก็ได้ เหมือนกับตอนที่คุณใช้ wildcard ใน shell ของระบบปฏิบัติการต่างๆ คุณสามารถดูรายละเอียดของเครื่องหมาย GLOB ได้ที่ http://www.sqlite.org/lang_expr.html
  • คุณจะต้องพิมพ์จำนวนผลลัพธ์ที่ค้นหาได้ทั้งหมด เสร็จแล้วจึงแสดงผลการค้นหาแค่ 100 ผลแรกเท่านั้น คุณสามารถนับจำนวนผลการค้นหาทั้งหมดโดยใช้คำสั่ง count ซึ่งคุณสามารถดู documentation ของมันได้ที่นี่ http://api.rubyonrails.org/classes/ActiveRecord/Calculations/ClassMethods.html#M002187