私はremotipartでRails 5を使用しています。リモートパーツのバージョンは次のとおりです。
gem 'remotipart', github: 'mshibuya/remotipart'
(この質問の時点で、現在のコミットは 88d9a7d55bde66acb6cf3a3c6036a5a1fc991d5e です)。
multipart: true and
remote: true`を含むフォームを送信したいが、添付ファイルを送信しない場合、うまく機能します。しかし、ファイルを送信すると失敗します。
ケースを説明するために、次のような応答を考えてみましょう。
(function() {
modelErrors('<div class=\'alert alert-danger alert-dismissible\' role=\'alert\'>\n <div aria-label=\'Close\' class=\'close fade in\' data-dismiss=\'alert\'>\n <span aria-hidden>\n ×\n <\/span>\n <\/div>\n Code can\'t be blank\n<\/div>\n');
}).call(this);
この応答が実行されると、到着直後 (js であるため)、フォームは期待どおりに表示されます (この場合、この検証エラーが発生するのは当然であり、レンダリングされた危険警告はそのようなテキストで表示されるのは正しいことです):
ただし、ファイル フィールドに入力し、まったく同じケース (まったく同じ検証エラー) を繰り返すと、フォームはまったく異なって見えます。
お察しのとおり、コンテンツはテキストとして渡されます。サーバーから受信する実際の応答は少し異なります。
<script type="text/javascript">try{window.parent.document;}catch(err){document.domain=document.domain;}</script>(function() {
modelErrors('<div class=\'alert alert-danger alert-dismissible\' role=\'alert\'>\n <div aria-label=\'Close\' class=\'close fade in\' data-dismiss=\'alert\'>\n <span aria-hidden>\n ×\n <\/span>\n <\/div>\n Code can\'t be blank\n<\/div>\n');
}).call(this);
これは私の応答の実際の本文です (これは悪いコピーペーストではなく、remotipart によってラップされた実際の応答です)。
modalErrors
関数はかなりばかげています:
function modalErrors(html) {
$('#main-modal > .modal-dialog > .modal-content > .modal-body > .errors').html(html);
}
jQuery が追加された html チャンクを比較すると (ブラウザーの DOM インスペクターで探します)、次のようになります。
良い:
<div class="alert alert-danger" role="alert">
<ul style="list-style-type: none">
<li>Code can't be blank</li>
</ul>
</div>
悪い:
Code can't be blank
ここで何が欠けていますか?私が望むのは、必要に応じてレスポーズが html コンテンツを追加できるようにすることです。