思考狮身人面像有很多通过 Rails
Thinking Sphinx Has Many Through Rails
你能帮我想想狮身人面像吗?
关系:
大陆
has_many :国家
has_many :country_reports, 通过: :countries, :class_name => "Report"
has_many:出版商,通过::country_reports
预期输出:
我要找Continent.first.publishers
请告诉我thinking sphinx这个怎么写rails
正如我在 Thinking Sphinx Google 群组中的回答:
因为您是在发布商上搜索,所以您需要修改发布商索引才能使其正常工作。我假设出版商 belongs_to :country_report、国家报告 belongs_to :国家和国家 belongs_to :continent.
如果您使用 SQL 支持的索引(使用 :with => :active_record 选项),那么您需要在发布商索引中包含以下内容:
has country_report.country.continent_id, :as => :continent_id
如果你使用的是实时索引(:with => :real_time),也是一样的,但你必须指定类型:
has country_report.country.continent_id, :as => :continent_id, :type => :integer
但是,如果在从出版商到大陆的关联链中有 has_many 或 has_and_belongs_to_many 而不是 belongs_to,那么它会稍微复杂一些。此外,在这种情况下,发布商可能有多个大陆,因此我们在这里处理多个值。
对于 SQL 支持的索引,一个小改动,改变关联链:
has country_reports.country.continent_id, :as => :continent_ids
但是对于实时索引,最好在 Publisher 模型上有一个方法 returns 一个或多个必要的值,然后在索引中使用它:
# in app/models/publisher.rb
def continent_ids
country_reports.collect(&:country).collect(&:continent_id)
end
# in app/indices/publisher_index.rb
has continent_ids, :type => :integer, :multi => true
然后,重建索引后,您可以按如下方式搜索(如果合适,属性可以是复数):
Publisher.search “foo”, :with => {:continent_id => continent.id}
这个也可以工作(虽然多层次的关联可能会混淆):
continent.publishers.search “foo”
你能帮我想想狮身人面像吗?
关系:
大陆 has_many :国家 has_many :country_reports, 通过: :countries, :class_name => "Report" has_many:出版商,通过::country_reports
预期输出:
我要找Continent.first.publishers
请告诉我thinking sphinx这个怎么写rails
正如我在 Thinking Sphinx Google 群组中的回答:
因为您是在发布商上搜索,所以您需要修改发布商索引才能使其正常工作。我假设出版商 belongs_to :country_report、国家报告 belongs_to :国家和国家 belongs_to :continent.
如果您使用 SQL 支持的索引(使用 :with => :active_record 选项),那么您需要在发布商索引中包含以下内容:
has country_report.country.continent_id, :as => :continent_id
如果你使用的是实时索引(:with => :real_time),也是一样的,但你必须指定类型:
has country_report.country.continent_id, :as => :continent_id, :type => :integer
但是,如果在从出版商到大陆的关联链中有 has_many 或 has_and_belongs_to_many 而不是 belongs_to,那么它会稍微复杂一些。此外,在这种情况下,发布商可能有多个大陆,因此我们在这里处理多个值。
对于 SQL 支持的索引,一个小改动,改变关联链:
has country_reports.country.continent_id, :as => :continent_ids
但是对于实时索引,最好在 Publisher 模型上有一个方法 returns 一个或多个必要的值,然后在索引中使用它:
# in app/models/publisher.rb
def continent_ids
country_reports.collect(&:country).collect(&:continent_id)
end
# in app/indices/publisher_index.rb
has continent_ids, :type => :integer, :multi => true
然后,重建索引后,您可以按如下方式搜索(如果合适,属性可以是复数):
Publisher.search “foo”, :with => {:continent_id => continent.id}
这个也可以工作(虽然多层次的关联可能会混淆):
continent.publishers.search “foo”