Rails:模型中的方法链接

时间:2011-02-10 21:39:31

标签: ruby-on-rails activerecord

尝试在我的模型中创建搜索方法,并根据传递给方法的参数连接条件。但是,在最初的“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")

...只运行在哪里。

有什么想法吗?

提前感谢。

1 个答案:

答案 0 :(得分:3)

你应该做的是通过调整result的定义来链接它:

result = result.where(...)

每次必须使用更新的范围重新分配回结果。这是因为result.where返回一个新范围,它不会调整现有范围。