2016年10月13日 星期四

Ruby - Sequel - 善用Dataset Filtering

這是前陣子在處理API的時候發現的,雖然大概大多數人都知道QQ



有時候要將前端要求的Filter加入到程式裡面,當初我會寫成
if params['filter'] == 1
   DB[:table].where(:column => :a).join(:table_c,:id => :table_c_id).order(:column)
else
   DB[:table].where(:column => :a).join(:table_b,:id => :table_b_id).order(Sequel.desc(:column))
end



有時候東西一多整個版面會很亂,後來就發現原來Dataset可以再單獨做Filter


dataset = DB[:table].where(:column => :a)

if params['filter'] == 1
   dataset = dataset.join(:table_c,:id => :table_c_id).order(:column)
else
   dataset = dataset.join(:table_b,:id => :table_b_id).order(Sequel.desc(:column))
end



有時候可以將近百行的CODE濃縮成二三十行,一點小發現

Ruby - Sequel - 將Dataset轉化為Array

從資料庫取出資料之後


一般都是
DB[:table].where(:column => :data).select(:column)


如果想要在取出資料後轉變為Array來處理資料,可以使用

DB[:table].where(:column => :data).select(:column).map {|data| data.values}


如此一來取出的資料將會變為陣列格式,可以使用迴圈處理,將Dataset轉成Hashes好像會有點問題,希望有比較熟的人可以幫忙回答一下