2017-05-23 7 views
0

rails 4.1.8、ruby 2.2、mysql、elasticsearch-rails 5.0.4、elasticsearch 5.2を使用しています。セレクタモデルのセレクタフィールドはvarcharカラムにjsonとして格納されます。何らかの理由で、as_jsonを使用して場所とその関連セレクタをロードすると、カラムにデータがあることがわかってセレクタフィールドがnilに戻りますか?RoR as_jsonは、データベースにあるデータが失われています。

セレクタテーブル:

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にあり、セレクタフィールド以外のすべてのデータはそこにあります。これはゼロです。データがあるとわかっています。もし私がそうするなら、

loc = Location.find(<id>) 
loc.selector 

セレクタフィールドはnilではありません。 Selectorモデルにas_jsonメソッドを追加しようとしましたが、何の効果もありませんでした。私が最近行った唯一の変更は、SelectorモデルをElasticsearchインデックスに追加することでした。複数のタイプのインデックスを1つ作成するためにIndexManagerを使用し、配置と再インデックス作成のためのレーキタスクを作成しました。唯一の違いは、このフィールドがjsonとして格納されていることですが、以前は正常に動作していました。

私はそれがゼロにならないものは何も考えられないので、何か考え、提案などは高く評価されます。

答えて

0

はその方法で私のようなラインを持っていた、それはセレクタフィールドを更新するとき、私はJSONを操作する方法を追加しました

問題を引き起こしていない理由カントーフィールドは、ゼロであることを引き起こしていたものを考え出しましたfiguを行く、私は

attr_accessor :selectors 

を追加しましたので、

sel_hash = JSON.parse(self.selectors) 

IDEはself.selectorsを解決することができませんでしたし、いくつかの理由でその線はセレクタフィールドがnilであることを引き起こしました再

関連する問題