2011-02-10 89 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