読者です 読者をやめる 読者になる 読者になる

@Konboi memo

主に技術に関してつらつらと。

Xslateでハマった

うまくエラーが表示できない

Xlateでエラーメッセージを表示させるとき表示方法ではまったのでメモ。
下記のような入力フォームがあった時に

<input type="input" name="tel1">-<input type="input" name="tel2">-<input type="input" name="tel3">
  • どれも入力されて無いとき
  • tel1だけ入力されてるとき
  • tel1,3が入力されてないとき

などなど...

どんなエラーがある場合でもエラーメッセージを1つのみ表示させい。
なので下記のようなコードをテンプレートファイルに書いた。

[% IF form.get_error_messages_from_param('tel1')  %]
[% FOR msg IN form.get_error_messages_from_param('tel1') %]
<div class="alert">
<p class="balloon"><img src="/v2/img/school/manavo/subscribe/balloon_alert.png" width="276" height="25"/></p>
<p class="message">[% msg %]</p>
</div>
[% END %]
[% ELSIF form.get_error_messages_from_param('tel2') %]
[% FOR msg IN form.get_error_messages_from_param('tel2') %]
<div class="alert">
<p class="balloon"><img src="/v2/img/school/manavo/subscribe/balloon_alert.png" width="276" height="25"/></p>
<p class="message">[% msg %]</p>
</div>
[% END %]
[% ELSIF form.get_error_messages_from_param('tel3') %]
[% FOR msg IN form.get_error_messages_from_param('tel3') %]
<div class="alert">
<p class="balloon"><img src="/v2/img/school/manavo/subscribe/balloon_alert.png" width="276" height="25"/></p>
<p class="message">[% msg %]</p>
</div>
[% END %]
[% ELSE %]
[% END %]

しかし
上記だとtel1にエラーが起きる場合はエラーメッセージが表示されるのに対して、
tel1に入力があり、tel2,3が未入力でもエラーメッセージがでない...


先輩に質問したら

 form.get_error_messages_from_param('tel1')

は配列だから配列のサイズが1以上の時にエラーが出るようにしたいいのでは?
と言われで直してみた

[% IF form.get_error_messages_from_param('tel1').size > 0  %]
[% FOR msg IN form.get_error_messages_from_param('tel1') %]
<div class="alert">
<p class="balloon"><img src="/v2/img/school/manavo/subscribe/balloon_alert.png" width="276" height="25"/></p>
<p class="message">[% msg %]</p>
</div>
[% END %]
[% ELSIF form.get_error_messages_from_param('tel2').size > 0 %]
[% FOR msg IN form.get_error_messages_from_param('tel2') %]
<div class="alert">
<p class="balloon"><img src="/v2/img/school/manavo/subscribe/balloon_alert.png" width="276" height="25"/></p>
<p class="message">[% msg %]</p>
</div>
[% END %]
[% ELSIF form.get_error_messages_from_param('tel3').size > 0 %]
[% FOR msg IN form.get_error_messages_from_param('tel3') %]
<div class="alert">
<p class="balloon"><img src="/v2/img/school/manavo/subscribe/balloon_alert.png" width="276" height="25"/></p>
<p class="message">[% msg %]</p>
</div>
[% END %]
[% ELSE %]
[% END %]

....あれれ(汗
エラーが出なくてなってしまった。
んー。 配列のサイズの取得が上手くいってないみたい。

調べたらXslateで配列のサイズを取得するには

Array.size()

と()がいるのが原因だった。

[% IF form.get_error_messages_from_param('tel1').size() > 0  %]
[% FOR msg IN form.get_error_messages_from_param('tel1') %]
<div class="alert">
<p class="balloon"><img src="/v2/img/school/manavo/subscribe/balloon_alert.png" width="276" height="25"/></p>
<p class="message">[% msg %]</p>
</div>
[% END %]
[% ELSIF form.get_error_messages_from_param('tel2').size() > 0 %]
[% FOR msg IN form.get_error_messages_from_param('tel2') %]
<div class="alert">
<p class="balloon"><img src="/v2/img/school/manavo/subscribe/balloon_alert.png" width="276" height="25"/></p>
<p class="message">[% msg %]</p>
</div>
[% END %]
[% ELSIF form.get_error_messages_from_param('tel3').size() > 0 %]
[% FOR msg IN form.get_error_messages_from_param('tel3') %]
<div class="alert">
<p class="balloon"><img src="/v2/img/school/manavo/subscribe/balloon_alert.png" width="276" height="25"/></p>
<p class="message">[% msg %]</p>
</div>
[% END %]
[% ELSE %]
[% END %]


解決!!
そういえば、はてなブログで templateファイルの指定ってできないのかな....

(んー... 言語、ライブラリによって配列のサイズが取得が違うから混乱する...)