

Railsでwhere文で取得したデータの中に、クエスチョンマークやクオーテーションマークがあった場合、エスケープされて

[code]

    &amp;
    
[/code]

等になっています。

viewで表示させる際は、ビュー内で.html_safeをして解決しましたが、  
コントローラ内の処理（をdelayed_jobのjobに書き出したもの）で、直接取得したデータを使いたい場合に、どうすればいいかわかりません。

具体的には、取得したデータを、あるAPIを利用した検索ワードとして使いたいのですが、その際にエスケープする前の文字列を検索ワードとして使いたいのです。

[code]

    @hoge_data = Hoge.where(neko: nil).order(created_at: :DESC).limit(10)
    
    @hoge_data.each{|row|
    
      if row.nil?
        # データ空のときとりあえず何もしない
      else
        p row['title']
        p row['title'].class
        p row['title'].html_safe
        item = get_data_from_tako(row['title'])
      end
    }
    
[/code]

`p row['title'].html_safe` も `p row['title']`も同じものが表示されます。  
`p row['title'].class`はstringです。  
item = get_data_from_tako(row['title'].html_safe)  
にすると、

[code]

    #<NoMethodError: undefined method `bytesize' for nil:NilClass>
    
[/code]

が返ります。

よろしくお願いいたします。


CC BY-SA 3.0
2017-10-16T07:17:00.360
38752
2017-10-17T12:47:27.137
2017-10-17T01:39:40.807
3271
25787
question
ruby-on-rails
Railsのwhereで取得した結果をエスケープさせたくない


素直にRails/ActiveRecordを使っている範囲では、データベースから持ってきたデータが勝手にエスケープされるようなことはありません。

[code]

    p row['title'] 
    
[/code]

でエスケープされた状態で表示されたと言うことは、DBに保存しているデータが既にエスケープされた状態か、どこかで余計なエスケープをするように意図的に作り込んだかどちらかです。

なお、闇雲に`.html_safe`するのはやめましょう。


CC BY-SA 3.0
2017-10-17T12:47:27.137
38805
2017-10-17T12:47:27.137
5793
38752
answer