Array of Objects
variable
local variable=> อยู่ใน method เป็นชื่อตัวแปร
instance variable =>@ จะมีค่าเมื่อมีการ assign ค่าผ่านทาง instance
class variable => @@
สรุป
ถ้าประกาศ
x เป็น local variable ใช้ ได้เฉพาะใน function หรือ scopeที่ประกาศไว้เท่านั้น
@x เป็น instance variable -> ควรประกาศตอนinitialize
เชื่อมกับ view template
@@x เป็น class variable -> สามารถอ้างอิงได้ทั้ง instance methods และ class method
$x เป็น class variable -> globle ไม่ถูกลบ ใน development จะเคลียร์ได้ ในproduction จะอยู่คงที่
class Ex
def self.___
end
end
Ex.___
Active Record เป็นคลาสที่จัดการเกี่ยวกับ database
Rails จะเชื่ิอมระหว่่าง Data model กับ database โดยคนเขียนโปรแกรมจะยุ่งแค่ data model ส่วนใน
database จะมีmethod จัดการ property ให้ในการติดต่อเพื่อที่จะต้องดึงข้อมูลของ property หรือ เก็บข้อมูลในdatabase จะใช้yml เป็นตัวบอก active record ว่าต้องเก็บไฟล์ไว้ที่ใด มีข้อมูลใดบ้าง
database.yml มีข้อมูลเกี่ยวกับฐานข้อมูลที่จะใช้งานในตอน development test และ production
-adapter
-host
-username
-database
-timeout
เมื่อเราสร้าง model จะมี ไดเรกทอรี \db\migrate โดยจะมีการสร้างไฟล์ 001_create_students.rb
เช่น เมื่อเราสร้าง Model Student จะได้
class createStudents
ชื่อตาราง คือ students
001 คือ version การ migration
ปล.หากเราต้องการแก้ไข migration เช่น เราสร้าง migration 001 หากเราต้องการแก้ไขmigration ดังกล่าวให้เราroll back ไปversion 000 ก่อน จากนั้น แก้ไฟล์.rb version 001แล้ว remigration ใหม่
ชนิดข้อมูลของ column
:binary
:boolean
:date :time :datetime
:decimal
:float
:integer
:string
methods self.up เปลี่ยนแปลงฐานข้อมูล
self.down ถอยกลับมาหนึ่งversion
เราจะใช้ block| t | ในคลาส CreateStudents กำหนด field ใน ตาราง ซึ่งเป็น property ของ class
Syntax
datamodel โครงสร้างสำหรับการเก็บข้อมูลลงในdatabase
ruby script/generate model student name:string dept:string
จะเป็นการสร้าง model testโดย
ชื่อของ class ไว้อ้างอิง class method ในการจัดการเกี่ยวกับ property
ใน /models/ จะมี student.rb
Migration
เป็นการสร้าง โครงสร้างตารางใน database ตามแบบ data model ที่เราได้ออกแบบไว้ โดยสิ่งที่เราจะต้องทำก็คือ
เราต้องสร้าง model ก่อน ด้วยคำสั่ง
ruby script/generate model student //ซึ่งจะเป็นการสร้าง data model ซึ่งโดยปกติแล้วจะมีการสร้าง migration เริ่มต้นมาให้ หากยังไม่มีการสร้าง migration version ของ มัน จะเป็น 000 (ใน /db/migrate/ จะมีำไฟล์ version_create_student.rb อยู่ด้วย)แล้วเมื่้อมีการ migration ครั้ิงแรกก็จะเป็น 001 โดยจะแบ่งเป็น 2ส่วน
-ในส่วนของ datamodel จะมีการสร้าง class studentให้สามารถจัดการ datamodel ได้ด้วยหลักการ oopและ การ relation กันของ datamodel
-ในส่วนของ database จะเป็นส่วนของการสร้างตารางใน database การเปลี่ยนแปลงโครงสร้าง database ตาม โครงสร้าง datamodel นั้น
การ remigration และการ rollback
เนื่องจากในการสร้างตารางในdatabase เราอาจมีการเปลี่ยนแปลง field ต่างๆดังนั้น จึงมีการให้สร้าง version ของ migration ขึ้น หากเราต้องการเพิ่มบาง filed จากโครงสร้างเดิม เราก็แค่สร้่าง version ใหม่
ตามแล้วใช้ method ในการ add_column ซะ (remigration) แต่เราจำเป็นที่ จะต้องสร้าง method ในการย้อนกลับสิ่งที่เรา้้เพิ่มเติมมาด้วยเผื่อเปลี่ยนใจ มั้ง (rollback) อาจเป็นนามธรรมเกิน สิ่งที่เราต้องทำก็คือ
-1.สร้าง migration ขึ้น
ด้วยคำสัั่ง ruby script/generate migration name
-2.จัดการ ไฟล์ ที่อยู่ใน /db/migration/ verrsion_name.rb เช่น เพิ่้ม method add_column ใน self.up และ method remove_column ใน self.down
โดยใช้หลักที่ว่า method self.up ทำอะไร ไปจากversion เดิม ใน self.down จะต้องทำกลับให้เหมือนกับ version เดิม เนื่องจาก
1.remigration self.up จะทำงาน หาก rollback self.down จะทำงาน
2.เราสามารถ remigrate ไปยัง version ข้างหน้า(เช่น จาก 1ไป3) ได้ โดยที่มันจะเริ่มทำงาน self.upจาก 1 ไป2 จาก 2 ไป 3 และในการ rollback ไปยัง version ข้างหลัง (เช่น จาก 3ไป 1 )ได้ โดยที่มันจะเริ่มทำงาน self.down จาก 3 ไป 2 และไป 1
3.ทำการ remigration หรือ rallback ด้วยคำสั่ง
rake db:migrate หรือ
rake db:migrate VERSION=2
4.ตรวจสอบ จากใน database ว่า มีfiled เพิ่มอ่ะป่าว
methods
add_column =>เพิ่ม คอลัมน์
rename_column =>เปลี่ยนชื่อ
change_column =>เปลี่ยน type
Syntax
Student.create(:name => "_____",:dept=>"____")
Student.find(1)
Student.find_by_symbol "___"
Student.find_by_sql "sql_language"
Student.find :all
Model Relation
One to One
One to Many
Many to Many
Validation and Callback ตรวจสอบข้อมูลของค่าต่างๆ และตรวจสอบความถูกต้องตอน
ไหนก็ได้ เช่น ห้ามใส่ข้อมูลเกิน 10 มีอยู่2วิธี คือ ตรวจสอบเอง กับใช้ื built in
class Student
Built In
1. validate_presence_of =>
2.validates_uniqueness_of =>
3.validates_inclusion_of =>
4.validates_length_of
before_validation: function
before_create: function
เราต้องประกาศ def ด้วยว่าจะทำอะไรโดย
def dept_map
if self.dept=="cs"
__________
end
callback class ->สร้่างไฟล์.rb อีกไฟล์นึงใน models แล้วสร้าว class
class ______
def self.before_create(model)
if model.dept ==" "
____________
end
end
end
ตรวจสอบ dbModel
rake db:test:prepare
-เข้าไปที่ \test\unit แก้ไฟล์ .rb เพื่อตรวจสอบ
-พิมพ์ ruby test\unit\greet.test.rb ในcommand line
หรือใช้ rake test:units ตรวจสอบไฟล์ทั้งหมด
Make Assertions
assert_equal "hello world" g.hello("world")
1 tests , 2 assertion , 0 failures , 0 errors
2 assertion จำนวนที่ผ่านจากการตรวจสอบ
0 failures มีข้อผิดพลาด(ผิดที่ symantics)ที่ได้ค่าำไม่ตรงกับ assertion
0 errors ผิด syntax
syntax
assert_equal output , instance.f("__")
assert instant.f("___")
setup method ถ้า function ใน assertion จำเป็นต้องการใช้บางอย่างร่วมกัน
เช่น instance เดียวกัน สามารถ ประกาศไว้ใน setup เพื่อ share กันได้โดยsetup จะืำทำ
ก่อนมีการtest แต่ต้องป็นตัวแปร @___
ไม่มีความคิดเห็น:
แสดงความคิดเห็น