我正在一个ruby on rails应用程序中实现一个搜索表单。一般的想法是使用form_标记将搜索字段(通过params)提交给我试图搜索的类模型中的搜索函数。然后,如果函数名出现在params中,搜索函数将遍历每个参数并执行一个作用域函数。
问题是,当我对这样的集合调用搜索时:

@calendar.reservations.search({:search_email => "test"})

我不知道如何在搜索功能中引用@calendar.reservations的集合。
另外,我还不明白为什么@calendar.reservations.search(…)可以工作,但是reservations.all.search给了我一个错误,告诉我不能对数组调用实例方法。
我这里有搜索方法的详细信息:https://gist.github.com/783964
任何帮助都将不胜感激!

最佳答案

我不知道怎么称呼
@calendar.reservations的集合
从搜索功能中。
如果在classmethod中使用self(或Reservation,它是同一个对象),那么您将访问具有当前作用域的记录,因此在您的情况下,您将只看到特定日历的保留。
[编辑]我看了你的搜索功能,我想你想要的是:

def self.search(search_fields)
  search_fields.inject(self) do |scope, (key, value)|
    scope.send(key, value)
  end
end

另外,我也不明白为什么
@日历。预订。搜索(…)
可以,但是预订。所有。搜索
给我一个错误说你不能
对数组调用实例方法。
@calendar.reservations不返回标准数组,但返回一个(lazy)AssociationCollection,在这里,您仍然可以应用作用域(以及将方法分类为filter)。另一方面,Reservation.all返回一个普通数组,因此不能在那里(或任何作用域)执行search

08-26 08:51