0

好的,所以我有一个需要搜索的日期字段,但我需要像在 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

任何使这项工作的方法

4

2 回答 2

1

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

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

@my_query.where(:a => "b").select { |rec| rec.some_method == "some value" }
于 2012-04-06T16:08:55.950 回答
0

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

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

indexes "GET_DAY_FROM_DATE(start_date)", :as => :event_day
于 2012-04-10T02:50:42.723 回答