首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >acts_as_solr不会更新Rails中的关联模型

acts_as_solr不会更新Rails中的关联模型
EN

Stack Overflow用户
提问于 2010-03-19 02:29:09
回答 2查看 339关注 0票数 0

我正在使用acts_as_solr在项目中进行搜索。不幸的是,在保存模型时,关联模型的索引似乎没有更新。

示例:

我有三个模型:

代码语言:javascript
复制
class Merchant < ActiveRecord::Base
  acts_as_solr :fields => [:name, :domain, :description], :include => [:coupons, :tags]
  ...
end

class Coupon < ActiveRecord::Base
  acts_as_solr :fields => [:store_name, :url, :code, :description]
  ...
end

class Tag < ActiveRecord::Base
  acts_as_solr :fields => [:name]
  ...
end

我使用下面这行代码来执行搜索:

代码语言:javascript
复制
Merchant.paginate_by_solr(params[:q], :per_page => PER_PAGE, :page => [(params[:page] || 1).to_i, 1].max)

但是,由于某种原因,在我添加了一个在描述中包含单词“鞋”的优惠券后,查询“鞋”不会返回与优惠券相关联的商家。关联都起作用了,如果我运行rake solr:reindex,搜索就会返回新的优惠券。

我是否需要在每次创建新的优惠券时更新Merchant的索引?我是否必须更新整个类的索引,或者我可以只更新关联的商家?

这不应该是自动完成的吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-03-19 03:55:04

好吧,结果是发生了几件事。

在优惠券模型上,我放了一个after_save回调函数来更新相关商家的solr文档:

代码语言:javascript
复制
def update_merchant_solr
  merchant.solr_save
end

标签问题是由于acts_as_solr和is_taggable上after_save回调的顺序造成的。solr插入的商家after_save发生在is_taggable回调之前,因此,当调用商家solr回调更新其文档时,标签尚未与其关联。切换顺序起作用:

代码语言:javascript
复制
class Merchant < ActiveRecord::Base
  is_taggable :tags
  acts_as_solr :fields => [:name, :domain, :description], :include => [:coupons, :tags]
  ...
end
票数 1
EN

Stack Overflow用户

发布于 2010-03-19 03:21:00

我使用Sunspot,所以可能会有差异,但我必须在关联的模型上设置回调来重新索引父记录。我猜你也得做同样的事。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2472394

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档