I'm a Ruby on Rails / jQuery web developer. Follow me at @sikachu

เจออะไรใน Rails 3: เพิ่มพลัง ActiveRecord#find

January 2nd, 2010 Posted in News, Ruby, Ruby on Rails

เจออะไรใน 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 เพิ่มมาเป็นแน่แท้ … อันนี้ก็คงต้องรอดูต่อไปนะครับว่าจะมีอะไรเพิ่มขึ้นมาบ้าง :D

Sorry, comments for this entry are closed at this time.