2

リライト

私は2つのモデルを持っています。アプリと会話。アプリには複数の会話が含まれています

resources :apps do
    resources :conversations
end

タグのフォームを使用して2つのフォームを持つ単一のビューがあります。最初のフォームは、アプリ モデルを更新するためのものです。もう 1 つは、会話を作成または更新するためのものです。

私が抱えている問題は、form_for タグを使用すると、結果の html が _method 入力を生成しないことです。

EG 会話フォーム。

<form accept-charset="UTF-8" action="/apps/50c87614e976a31149000009/conversations" class="new_conversation ng-pristine ng-valid" id="new_conversation" method="post">

 <div style="margin:0;padding:0;display:inline">
<input name="utf8" type="hidden" value="✓">
<input name="authenticity_token" type="hidden" value="RqwwgBb737uuwg3PgRS+z0qlOP1aDqWe+2hrEeU0KHk=">
</div>

アプリフォーム

<form accept-charset="UTF-8" action="/apps/50c87614e976a31149000009" class="edit_app ng-pristine ng-valid" enctype="multipart/form-data" id="edit_app_50c87614e976a31149000009" 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="RqwwgBb737uuwg3PgRS+z0qlOP1aDqWe+2hrEeU0KHk="></div>

これが問題を抱えているため、ここでは会話モデルに焦点を当てましょう。

上記の html から、会話フォームが投稿要求を送信する必要があることが予想されます。残念ながら、Rails アプリで受信すると、Puts リクエストとして扱われます。

form_for のドキュメントを見ると、form_for が _method という非表示の入力フィールドを設定することになっていることがわかります。

Conversation フォームを見て App フォームと比較すると、会話に _method 属性がないことがわかります。これがなぜなのか、私には判断できません。

これが無視されている理由は誰にもありますか? または、会話フォームを送信すると、投稿ではなくプットが送信されるのはなぜですか?

4

1 に答える 1

0

_methodRailsは、値がという非表示の入力を持つ HTTP put as post フォームを実装していますput。PUT リクエストとして処理されているフォームに、その非表示の入力が表示されるはずです。

form_forフォームを作成しているオブジェクトが既に存在する場合、プットフォームを生成します。

于 2012-12-20T12:09:23.017 に答える