編集 - 明らかに、ここで私を悩ませているものは誰にもわかりません。ステータス属性の送信をブロックしているページの他の場所で何かを行ったことが問題だと思います。問題は、何も見えないことです。誰かが似たようなものを見て、どこを見る必要があるかを提案できることを願っています。
私のページには、データを 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="✓" />
<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 は、ブラウザー フォームの魔法の予約語のようなものですか? 何が起きてる?