2

我的 Rails 3 中有一个名为 Article 的模型,我用rake environment tire:import CLASS='Article' FORCE=true它来做索引。但我只希望将字段deleted等于 false 的文章编入索引。我该如何实施?

4

3 回答 3

2

您可以使用作用域方法。

rake environment tire:import CLASS='Article.scoped(:conditions => {:deleted => false})' FORCE=true

参考:由karmi回答@ https://github.com/karmi/tire/issues/458

于 2013-01-23T13:39:54.450 回答
1

以上解决方案似乎不起作用。

我们传递给CLASS环境变量的内容仅用于查找轮胎指数和计算total进度条。检查Line 97: total = klass.count rescue nilLine 49: klass.tire.import(params) do |documents|https://github.com/karmi/retire/blob/master/lib/tire/tasks.rb

我找到的唯一可行的解​​决方案(使用 mongoid)是,

Tire.index "articles" do
   import Article.scoped(:conditions => {:deleted => false}) 
end

这就像Article.index.import( Article.scoped(:conditions => {:deleted => false}))karmi @ https://github.com/karmi/tire/issues/458回答的一样好

但是使用上述方法的优点是当我们需要自定义映射时。像下面

Tire.index "articles" do
   import Article.scoped(:conditions => {:deleted => false}) do|documents|
     documents.map{|document| document[:content].downcase!; document}
   end
end
于 2013-11-15T10:49:42.280 回答
0

在最新的轮胎宝石中,这对我不起作用。它在轮胎 v0.5.4 中确实有效,但在 v0.6.2 中无效。所以,为了创建一个 rake 任务,我这样做了......

desc 'Index articles'
task :index => :environment do
  Article.where(:deleted => false).find_in_batches do |batch|
    Tire.index(Article.index_name).import batch
  end
end

自述文件中推荐使用 find_in_batches 。

于 2014-04-02T17:18:43.513 回答