เจออะไรใน Rails 3: เพิ่มพลัง ActiveRecord#find
January 2nd, 2010 Posted in News, Ruby, Ruby on Rails | No Comments »เจออะไรใน Rails 3 เป็นสกู๊ปพิเศษสำหรับนำเสนอสิ่งใหม่ๆ ที่จะมีเพิ่มขึ้นมาใน Ruby on Rails 3.0
ความเป็นมา
หลายคนนั้นคงจะรู้จักกับฟีเจอร์ named_scope ที่ได้เปิดตัวออกมาพร้อมกับ Rails 2.1 ทำให้เราสามารถที่จะเขียน scope แล้วนำ scope นี้ไปใช้ได้ใหม่เรื่อยๆ เป็นไปตามหลักของ DRY เช่น
class Post < ActiveRecord::Base named_scope :published, :conditions => { :status => :published } named_scope :latest, lambda { |limit| { :order => "id DESC", :limit => limit }} end # Use in the code Post.published # => all published posts Post.latest(5) # => Latest 5 posts Post.latest(10).published # => Latest 10 published posts
ซึ่งการเพิ่มฟีเจอร์นี้ให้กับ Rails นั้น ทำให้มี plugin ต่างๆ เพิ่มขึ้นมาอีกมากมาย ที่เป็นการเพิ่ม scope ให้กับ model
หลังจากที่ named_scope นั้นถูกใช้กันอย่างแพร่หลาย คาดว่า @lifo คงเห็นสมควรแก่เวลาแล้ว จึงได้เวลา deprecate method #find เดิม แล้วให้ทุกคนเปลี่ยนไปใช้ syntax แบบใหม่ซึ่งคล้ายคลึงกับ named_scope แทน
Syntax แบบใหม่
สำหรับ syntax แบบใหม่นั้น ดูได้จาก snippet ด้านล่างนี้ครับ (เอามาจากที่นี่)
posts = Post.where("status = 'published'") posts = posts.order("created_at DESC").limit(10) posts.each{ |post| puts post.title }
จะเห็นได้ว่ามีการเพิ่ม scope where, order และ limit เข้ามาเป็นมาตรฐาน แล้วก็จะเหมือนกับ named_scope คือการ execute query นั้นจะเกิดขึ้นเมื่อจะทำการเข้าถึง object (บรรทัดสุดท้าย) เท่านั้น ทำให้สามารถ chain scope ได้
เนื่องจาก snippet ที่ได้มานั้นมีนิดเดียว แต่เป็นไปได้ว่าเราคงจะเห็น method อื่นๆ เช่น group, select, include เพิ่มมาเป็นแน่แท้ … อันนี้ก็คงต้องรอดูต่อไปนะครับว่าจะมีอะไรเพิ่มขึ้นมาบ้าง














