a = Category.new(:name => 'Ruby', :position => 1)
a.save
# save 還有相同方法”save!”
# 有無驚歎號的差別在於validate資料驗證不正確的動作,
# 無驚歎號版本會回傳布林值(true或false),有驚歎號版本則是驗證錯誤會丟出例外。
b = Category.create(:name => 'Perl', :position => 2)
# create也有“create!”方法,作用同save
# create在執行的時候已經將資料插入數據庫,無須再調用save方法
b.save(:validate => false)
# 透過:valiate => false 可以略過驗證
# create雖然無需再調用save方法,但仍然可以調用save方法。
Category.first
# 取出第一條記錄
Category.last
# 取出最後一條記錄
Category.all
# 取出所有
Category.find(1)
# 取出id=1的記錄
Category.find(1, 3)
Category.find([1, 3])
# 取出id爲1和3的記錄
# find方法會在沒有取到符合條件的記錄時拋出錯誤
# 如果你不想這樣,請用:find_by_id
Category.find_by_name('Ruby')
# 取出name字段等於“Ruby”的記錄
# 可以用and進行多字段查詢
Category.find_by_name_and_postion('Ruby', 1)
# 取出name='ruby' and postion=1的記錄
# find_by_* 和 find_all_by_*它們的不同之處是前者會進行“limit 1”限制
Category.find_by_sql("SELECT * FROM categories WHERE name LIKE '%p%'")
# 如果你想自己手寫sql就可以使用這個方法
# find_by_sql沒有“find_all_by_sql”方法
Category.where(:name => 'Ruby', :position => 1)
# `name` = 'Ruby' AND `position` = 1
Category.where(["name = ? or position = ?", 'Ruby', 3])
# `name` = 'Ruby' OR `position` = 3
# 另外,where 是lazy loading,也就是直到真的需要取值的時候,纔會跟資料庫拿資料。
# 如果需要立即觸發,可以接着使用.all, .first, .last,例如:
# Category.where(["name = ? or position = ?", 'Ruby', 3]).all
Category.limit(5).all
# 限制查詢記錄數,它只接受這一個參數
# 如果要使用形如:“limit x, y"請組合使用“offset”方法
Category.order("position")
Category.order("position DESC")
Category.order("position DESC, name ASC")
# 對內容排序
Category.order("position").reorder("name")
# 改用name 排序
Category.order("position").reorder(nil)
# 取消所有排序
Category.limit(3).offset(2)
# 從第二條開始顯示3條記錄
Category.select('id, name')
# 只查詢出id,name欄位的數據
Category.readonly.first
# 使用readonly可以使查詢出來的結果不能再次改變其值
# 以上查詢方法可以進行無順序的自由的串接:
# Category.select(..).order(..).limit(.)....
Category.where("position > 1").find_each do |category|
category.do_some_thing
end
# 如果資料量很大,但是又需要全部拿出來處理,可以使用find_each 批次處理
Category.find_each(:batch_size => 2) do |category|
puts category.id
end
# 預設會批次查出1000條,如果需要設定可以加上:batch_size 參數。
c = Category.all
c.reload
# reload 重新查詢出結果給c
c = Category.first
c.destory
# 刪除id = c.id的資料
Category.delete(2)
# 刪除id = 2的資料
Category.count
# 獲取記錄總數
Category.average(:position)
Category.maximum(:position)
Category.sum(:position)
# 略過...
Category.where(["position>?", 2]).count
# 用where縮小範圍
c = Category.first
c.update_attributes(:position => 6)
# or
# 注意下邊這個,我照書上抄的,老是報錯,好像不行,試着傳hast,array,symbol都不行
# 版本 3.1.0
c.update_attributes('position', 6)
# 更新id = c.id的記錄使欄柆position=6
# 同類方法:“update_attributes!”
a = Order.select("*,sum(price) as p,count(*) as c").where("a=? ",2).group("date_format(created_at,'%Y-%m')")
#select 指定要查詢的字段
#group 分組
# date_format mysql中的時間格式化
rails-database
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.