rubyflow.ru
11 May '12, 7am
ActiveRecord::Relation#merge или как объединиться с друзьями
Цель данного обзора показать пару приемов использования метода #merge из модуля ActiveRecord::SpawnMethods , предназначенного для объединения скоупов. relation_destination.merge(relation_source) добавляет sql-выражение из relation_source в итоговый relation_destination . Приведу пару примеров. Допустим мы хотим получить список всех оплаченных заказов, но только для клиентов с голубыми глазами. В общем случае это могло бы быть так: Order.paid.joins(:user).where(:users => { :eye_color => 'blue' }) # => SELECT "orders".* FROM "orders" INNER JOIN "users" ON "users"."id" = "orders"."user_id" WHERE "orders"."status" = 3 AND "users"."eye_color" = 'blue' Но в таком подходе есть проблема: мы должны знать все тонкости выборки этих самых клиентов с голубыми глазами. И возможно, что таковыми должны быть не только клиенты с признаком eye_color => 'blue' , но и со статусом равным 1. В т...
Full article:
http://rubyflow.ru/items/1296