Powered By Blogger

05 June 2007

Ruby update ข้อมูล กับ database ด้วย console

หลังจาก ลองมั่วๆ Ruby OnRails มาสักสามสี่วันแล้ว มึนๆเลย

ก็เลยลองทวน basic กันหน่อย
โดยใช้

Ruby script/console เพื่อช่วยเรียน rubyเอง

สร้าง model ชื่อว่า user (table users )
ด้วย ruby script/generate model user user <-- ไม่ค่อยแน่ใจ
กับ controller
ด้วย ruby script/generator scaffold mydb user
แล้วเปิด ruby script/server เป็น web server
แล้ว เข้า page ด้วย http://localhost:3000/user

พอดีต้อง ปรับปรุง model แต่ไม่ค่อยเข้าใจ ActiveRecord เลยหาทาง
ทำความเข้าใจ ก็เลย ลองใช้วิธี console ช่วยให้เข้าใจ มากนิดนึง

ก็ เปิด ruby script/console
ทีนี้ ลองสร้าง
u = User.new ( ) ทำเท่าไร ก็ error เลยหาข้อมูลสักพัก หลังจากไปนั่งอ่านเวปสนุกๆ
พอ กลับมา ก็เปิด fxri ปรากฏว่าโหลดนานพอดู เพราะเครื่องช้าไปนิด
แล้วก็ ใส่ keyword ลองเดามั่วๆ หาคำว่า connection

พบ ActiveRecord::Base.establish_connection ก็เป็นการเดาล้วนๆ
เดาจาก ADODB ของ VB6 เพราะว่า ก่อน ใช้ RecordSet ต้องเปิด connectionก่อน
เพราะ เดิม แจ้ง error ว่า login เข้าเบส ไม่ได้คล้ายๆ ไม่มี การใส่ password

ได้คำอธิบายว่า ทำแนวๆนี้
ActiveRecord::Base.establish_connection( :adapter => "mysql", :host => "localhost", :username => "myuser", :password => "mypass", :database => "somedatabase" )

ก็เลยแก้ไขนิดหน่อย แล้วก็ไป Paste ใน console
ผลคือ มันคล้ายๆทำงานแทน database.yml ใน directroy config
ซึ่งก็คือ มีการเปิด connection ใหม่ให้
คราวนี้
ก็ลอง

u = User.new( )
ได้ผล ใช้งานได้ ได้ instance u สำหรับจัดการ Table Users มาแล้ว

ทีนี้ลองใช้ ดึงข้อมูลล่ะ
rows = User.find ( :all ) ได้ผลครับ ออกมา 2 แถว
อ้างได้ด้วย
rows[0].name = "new name"
rows[0].save
ผล คือ database ใน phpMyAdmin เปลี่ยนตามทันทีเลย

หรือจะลองด้วย เงื่อนไข where กับ first
cond = [ "name=? and password = ? " , "myname" ,"mypass" ]
row = User.find (:first , :conditions => cond )
ก็ได้ผลเหมือนกัน แต่ได้ แถวเดียว
แล้วแก้ไขโดย
row.name= "newname1"
row.save


หากจะค้นหาด้วยเงื่อนไขอื่นๆ อาจใช้ like เช่น
row = User.find(:first, :conditions=> "name like '%user%'" ) ก็ได้

No comments: