6

編集 - 明らかに、ここで私を悩ませているものは誰にもわかりません。ステータス属性の送信をブロックしているページの他の場所で何かを行ったことが問題だと思います。問題は、何も見えないことです。誰かが似たようなものを見て、どこを見る必要があるかを提案できることを願っています。


私のページには、データを Web アプリに投稿するためのダミー フォームがあります。このようにRailsで(HAMLを使用して)作成されます。

=form_tag bulk_invoice_path(''), method: 'put', class: 'mark-sent-form' do
  =hidden_field_tag 'invoice[status]', 'Sent'

これにより、次の html が生成されます。

<form accept-charset="UTF-8" action="/bulk_invoices/" class="mark-sent-form" method="post">
  <div style="margin:0;padding:0;display:inline">
    <input name="utf8" type="hidden" value="&#x2713;" />
    <input name="_method" type="hidden" value="put" />
    <input name="authenticity_token" type="hidden" value="OU8GtbHycR/EJ+H3GG9MN59xI59v47LSaFc2wYZloAs=" />
  </div>
  <input id="invoice_status" name="invoice[status]" type="hidden" value="Sent" />
</form>

DOM では、これは次のように表示されます。

<form accept-charset="UTF-8" action="/bulk_invoices/" class="mark-sent-form" method="post">
  <div style="margin:0;padding:0;display:inline">
    <input name="utf8" type="hidden" value="✓">
    <input name="_method" type="hidden" value="put">
    <input name="authenticity_token" type="hidden" value="OU8GtbHycR/EJ+H3GG9MN59xI59v47LSaFc2wYZloAs=">
  </div>
  <input id="invoice_status" name="invoice[status]" type="hidden" value="Sent">
</form>

このフォームは jquery (coffeescript を使用) で次のように投稿されます。

jQuery ->
  $('a.mark-sent').click -> updateBulkInvoices('.mark-sent-form')

updateBulkInvoices = (form) ->
  $(form).attr('action', "/bulk_invoices/#{checkedInvoices().get().join()}").submit()

このパターンは他のアクションでうまく機能しましたが、'invoice[status]' が問題を引き起こしているようです。フォームが jQuery で送信されると、隠しフィールドは渡されません。Rails コンソールに次のように表示されます。

Parameters: {"utf8"=>"✓", "authenticity_token"=>"+qW9kIih5l2j69w1LK2YfQ9mYQ7nKPDm5XgLZuKB4ic=", "id"=>"16"}

つまり、invoice[status] フィールドがフォーム パラメータで渡されていません。このフィールドの名前を別の名前に変更すると、問題なく動作します。

=form_tag bulk_invoice_path(''), method: 'put', class: 'mark-sent-form' do
  =hidden_field_tag 'invoice[flatus]', 'sent'

コンソールに次のパラメーターが表示されます。

Parameters: {"utf8"=>"✓", "authenticity_token"=>"+qW9kIih5l2j69w1LK2YfQ9mYQ7nKPDm5XgLZuKB4ic=", "invoice"=>{"flatus"=>"sent"}, "id"=>"16"}

Chrome の開発者ツールの「ネットワーク」タブを監視すると同じことが起こっているので、Rails の問題ではないと思います。ブラウザの問題のようです。Safari と Firefox でも同じことが言えます。

status は、ブラウザー フォームの魔法の予約語のようなものですか? 何が起きてる?

4

1 に答える 1

3

問題を再現することはできませんでしたが、フォームを送信する際の Javascript が原因であると思われます。これをデバッグするには、次のようにします。

  1. Chrome でページを開く
  2. 送信ボタンを右クリックし、「要素の検査」を選択します
  3. 「ソース」タブを選択します。
  4. [ソース] タブで、[送信] をクリックしたときに呼び出される Javascript のソースを見つけます。おそらく、「要素」タブの下のボックスにある小さな右矢印をクリックする必要があります。また、改行がすべて削除されてコードが醜いものになっている場合は、ページの下部にある「整形済み」中括弧アイコンをクリックできます。
  5. メソッドが見つかったら、左側の横にある行番号をクリックします。右側のペインで、「ブレークポイント」セクションの下に表示されるはずです。
  6. ページをリロードする
  7. 送信ボタンをクリックします。

これにより、submit アクションで一時停止された Javascript デバッガーに移動し、コードをステップ実行して、コードが何をしているかを正確に確認できます。

これが役立つことを願っています!

于 2012-11-08T10:56:47.963 に答える