使用rails 4.1.8,ruby 2.2,mysql,elasticsearch-rails 5.0.4,elasticsearch 5.2。选择器模型上的选择器字段作为json存储在varchar列中,出于某种原因,当我使用as_json加载位置及其关联的选择器时,当我知道列中有数据时,选择器字段返回nil?
选择表:
create table Selectors do
t.text selectors
t.text selectors_other
t.references location
t.timestamps
end
我最近添加了弹性搜索,因此该模型具有:
settings index: {
analysis: {
analyzer: {
selector_analyzer: {
type: :standard,
stopwords: ["some","words","here"]
}
}
}
}
mapping do
indexes :selectors, {analyzer: :selector_analyzer}
indexes :selectors_other, {analyzer: :selector_analyzer}
end
def as_indexed_json(options={})
{
'id' => id,
'selectors' => selectors,
'selectors_other' => selectors_other
}
end
我为获取视图数据而进行的调用是
Location.find(<id>).as_json(:include => [:selector, :response])
我期望的每个字段都在json中,除了选择器字段为nil之外,所有数据都在那里。我知道有数据,因为如果我这样做:
loc = Location.find(<id>)
loc.selector
选择器字段不是nil。我尝试在Selector模型中添加as_json方法,但它没有任何效果。我最近做的唯一更改是将Selector模型添加到Elasticsearch索引中。我使用IndexManager来创建一个具有多种类型的索引,并为部署和重新索引创建了一个rake任务。唯一的区别是这个字段存储为json,但它之前工作正常。
任何想法,建议等都会受到赞赏,因为我无法想到会导致它为零的任何事情。
答案 0 :(得分:0)
弄清楚是什么导致该字段为零,这不是它导致问题的原因
我在更新选择器字段时添加了一个操作json的方法,在那个方法中我有一行像
sel_hash = JSON.parse(self.selectors)
IDE无法解析self.selectors所以我添加了
attr_accessor :selectors
该行由于某种原因导致选择器字段为零,如图所示