RoR as_json调用数据库中缺少的数据

时间:2017-05-23 10:34:37

标签: json ruby-on-rails-4 elasticsearch

使用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,但它之前工作正常。

任何想法,建议等都会受到赞赏,因为我无法想到会导致它为零的任何事情。

1 个答案:

答案 0 :(得分:0)

弄清楚是什么导致该字段为零,这不是它导致问题的原因

我在更新选择器字段时添加了一个操作json的方法,在那个方法中我有一行像

sel_hash = JSON.parse(self.selectors)

IDE无法解析self.selectors所以我添加了

attr_accessor :selectors

该行由于某种原因导致选择器字段为零,如图所示