The scoped method allows you to generate named scopes on the fly. In this episode I show how to use anonymous scopes to improve the conditional logic which was used in the previous episode on advanced search form.
# config/initializers/global_named_scopes.rb
class ActiveRecord::Base
named_scope :conditions, lambda { |*args| {:conditions => args} }
end
# models/search.rb
def find_products
scope = Product.scoped({})
scope = scope.conditions "products.name LIKE ?", "%#{keywords}%" unless keywords.blank?
scope = scope.conditions "products.price >= ?", minimum_price unless minimum_price.blank?
scope = scope.conditions "products.price <= ?", maximum_price unless maximum_price.blank?
scope = scope.conditions "products.category_id = ?", category_id unless category_id.blank?
scope
end
本文介绍了一种使用动态范围和匿名作用域来改进高级搜索表单条件逻辑的方法。通过 ActiveRecord 的 scoped 方法,可以灵活地生成带有条件的查询,这些条件可以根据用户输入的关键词、价格范围和类别进行调整。
1192

被折叠的 条评论
为什么被折叠?



