こんにちは。たなか(@tanaka_ricecake)です。
相変わらずFatFreeCRMに振り回されてる日々です。
このGemは標準でビューにHamlを利用しているので、Hamlビギナーには結構扱いにくい感じになってたりします(学習しろよって話ですがね!)
先日、以下のような症状を解決できたのでシェアしておきます。
もくじ
症状
html.hamlでbyebugを仕込んでも、xss_mods.rbに飛んで該当のビューで止まらない!
_show.html.hamlみたいなファイルにbyebugを仕込みます。
= byebug
関連記事→ [Rails] Hamlの中でbyebugを使う
もちろんbyebugを仕込んだ_show.html.hamlで止まってほしいのですが、ターミナルで確認すると…
[16, 25] in /usr/local/bundle/gems/haml-5.0.4/lib/haml/helpers/xss_mods.rb
16: end
17:
18: # Don't escape text that's already safe,
19: # output is always HTML safe
20: def html_escape_with_haml_xss(text)
=> 21: str = text.to_s
22: return text if str.html_safe?
23: Haml::Util.html_safe(html_escape_without_haml_xss(str))
24: end
25:
haml/helpers/xss_mods.rb の中身で止まってしまっています。どこだよここは!!!
解決方法
“n” (ステップ実行)で一つずつ処理を進める
いままでbyebugは、[command + d] で処理を抜けてましたが、これを”n”でステップしながら進めます。
2、3と処理を進めていくと……
[3, 12] in /home/app/app/views/accounts/_sidebar_show.html.haml
3: - pipeline = @account.opportunities.pipeline.map(&:weighted_amount).compact.sum
4:
5: .panel#summary
6: %h4= h(@account.name)
7: = byebug
=> 8: - if @account.website
9: %div
10: %b= link_to(truncate(@account.website, length: 30), @account.website.to_url, :"data-popup" => true, title: t(:open_in_window, @account.website))
ちゃんとhtml.hamlで止まるようになりました! よかった!
これでデバッグできそうです!
まとめ
段階を踏もう。
xss_mods.rbってのはhamlが持つhelpersファイルの一つで、ビューの読みこみの際に処理が通るみたいでした。
こういった処理を抜けて最終的にhtml.hamlに到達するので、ステップ実行で一つずつ進めてやればよいとのこと。
ってことでHamlのビューでbyebugできるようになりました。
なにかにつけて躓きがちなHaml。今の所嫌いだな。
関連記事