หลังจาก ลองมั่วๆ 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:
Post a Comment