Ransack ile kolay bir şekilde arama ve sıralama işlemlerini yapabiliyoruz. Gemfile dosyasına
gem 'ransack' satırını ekledikten sonra bundle install ile kuralım.
Arama için search metodunu kullanıyoruz.
12
>>Product.search(:name_cont=>"aaaa").result.to_sql"SELECT `products`.* FROM `products` WHERE (`products`.`name` LIKE '%aaaa%')"
Aynı anda iki alanda arama yapmak istersek or kullanıyoruz.
12
>>Product.search(:name_or_barcode_cont=>"aaaa").result.to_sql"SELECT `products`.* FROM `products` WHERE ((`products`.`name` LIKE '%aaaa%' OR `products`.`barcode` LIKE '%aaaa%'))"
>>Product.search(:name_or_barcode_or_keywords_name_cont=>"aaaa").result.to_sql"SELECT `products`.* FROM `products` LEFT OUTER JOIN `keywords_products` ON `keywords_products`.`product_id` = `products`.`id` LEFT OUTER JOIN `keywords` ON `keywords`.`id` = `keywords_products`.`keyword_id` WHERE (((`products`.`name` LIKE '%aaaa%' OR `products`.`barcode` LIKE '%aaaa%') OR `keywords`.`name` LIKE '%aaaa%'))"
12
>>Product.search(:name_or_barcode_or_brand_name_cont=>"aaaa").result.to_sql"SELECT `products`.* FROM `products` LEFT OUTER JOIN `brands` ON `brands`.`id` = `products`.`brand_id` WHERE (((`products`.`name` LIKE '%aaaa%' OR `products`.`barcode` LIKE '%aaaa%') OR `brands`.`name` LIKE '%aaaa%'))"
Tamamda bu sondaki cont ne işe yarıyor ? diye sorular duyar gibi oluyorum. contRansack eylemlerinden birisi. Yani nasıl arama yapacağını belirtiyoruz. İçerisinde aaaa geçsin, aaaa ile başlayanler vs. vs. cont içerisinde aaaa geçen kayıtları getiriyor. Diğer Ransack eylemlerini şu linkten incleyebilrsiniz. https://github.com/ernie/ransack/wiki/Basic-Searching