2

私はremotipartでRails 5を使用しています。リモートパーツのバージョンは次のとおりです。

gem 'remotipart', github: 'mshibuya/remotipart'

(この質問の時点で、現在のコミットは 88d9a7d55bde66acb6cf3a3c6036a5a1fc991d5e です)。

multipart: true andremote: 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      &times;\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      &times;\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 コンテンツを追加できるようにすることです。

4

1 に答える 1