如何进行搜索以使用attr_accessor?

时间:2012-04-06 15:21:27

标签: ruby-on-rails ruby ruby-on-rails-3 thinking-sphinx

好的,所以我有一个需要搜索的日期字段,但是我需要像在mysql查询中那样在白天搜索

 search_conditions << ["DAY(open_date) != ?", event.thursday.day] if options[:thur].blank?

我需要用Thinking Sphinx做这个条件所以我试过这个

    attr_accessor :event_day

    def event_day
     self.start_date.day
    end

    #thinking sphinx configurations for the event search
    define_index do
     indexes event_day
     ...
     ...

在搜索中我尝试了这个

 search_string = "@event_day -#{event.thursday.day}" unless options[:thur].blank?

但我一直收到此错误

index event_core: query error: no field 'event_day' found in schema

任何使这项工作的方法

2 个答案:

答案 0 :(得分:1)

您不能在SQL查询中使用ruby属性。 Rails不是那么聪明。

您需要编写复制该函数的SQL,或者通过它过滤查询结果,例如。

@my_query.where(:a => "b").select { |rec| rec.some_method == "some value" }

答案 1 :(得分:0)

正如迈克尔指出的那样,Sphinx无法访问Ruby属性 - 它直接与您的数据库对话。

因此,您可以创建一个包含事件日值的列,并通过Sphinx引用该列,或者您可以创建一个使用SQL函数的字段(可能会有所不同,具体取决于MySQL或PostgreSQL)来提取当天从start_date列 - 不是特别复杂。它可能最终看起来像这样:

indexes "GET_DAY_FROM_DATE(start_date)", :as => :event_day