2011-02-10 69 views
1

试图在我的模型中创建一个搜索方法,并根据传递给方法的参数来加入条件。然而,没有得到链最初的“在那里”Rails:模型中的方法链接

控制器后:

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块,做一个链直接事后,这不是't工作:

result = where(:foo => "bar") 
result.order("name DESC") 

...运行只是在哪里。

任何想法?

提前致谢。

回答

3

你应该做的是通过调整result定义链它作为你走:导致与更新的范围

result = result.where(...) 

每次必须重新分配回。这是因为result.where返回一个新的作用域,它不调整现有的作用域。

+0

非常感谢! – jmccartie 2011-02-10 22:20:52