尝试在我的模型中创建搜索方法,并根据传递给方法的参数连接条件。但是,在最初的“where”之后没有任何东西被链接
控制器:
Item.search(args)
型号:
def self.search(args = {})
include ActsAsTaggableOn # Tagging model for search
result = where("title LIKE ? OR description LIKE ? OR tags.name LIKE ?", "%#{args[:search]}%", "%#{args[:search]}%", "%#{args[:search]}%")
.joins("JOIN taggings ON taggings.taggable_id = items.id")
.joins("JOIN tags ON taggings.tag_id = tags.id")
# Categories
if args[:categories]
result.where(:category_id => args[:categories])
end
# Order
if args[:order] == "category"
result.joins(:categories).order("categories.title ASC")
else
result.order("title DESC")
end
# Pagination
result.paginate(:per_page => 10, :page => args[:page])
end
即使我删除if块并在之后直接执行链接,它也不起作用:
result = where(:foo => "bar")
result.order("name DESC")
...只运行在哪里。
有什么想法吗?
提前感谢。
答案 0 :(得分:3)
你应该做的是通过调整result
的定义来链接它:
result = result.where(...)
每次必须使用更新的范围重新分配回结果。这是因为result.where
返回一个新范围,它不会调整现有范围。