1

ユーザーがクライアント エントリをインデックス ページから直接編集できるようにする機能を作成しようとしています。ユーザーが [編集] をクリックすると、要素を入力テキスト フィールドに置き換えるパーシャルがレンダリングされます。しかし、「クライアントの更新」ボタンを押すと、次のエラーが表示されます。

"No route matches [POST] "/clients/27"

新しいクライアントを作成し、インデックスから直接クライアントを破棄することができます...更新アクションで何が間違っていますか?

パーシャル:

<tr id="test">
  <%= form_for Client.find(27), :method => :PUT do |f| %>
    <td class="input">
      <%= f.text_field :name, :value => "Test" %>
    </td>
    <td class="input">
      <%= f.text_field :company %>
    </td>
    <td class="input">
      <%= f.text_field :email %>
    </td>
    <td class="grayedOut"></td>
    <td class="actions">
      <%= f.submit "Confirm edit" %>
    </td>
  <% end %>
</tr>

routes.rb ファイル:

resources :clients do
  resources :projects do
    resources :items
  end
end
4

1 に答える 1

7

私はそれを考え出した。何らかの理由で、テーブル内にフォームをネストすると、フォームの送信方法が台無しになるようです。テーブルの外側にパーシャルをレンダリングしたとき、フォームは更新アクションを送信しても問題ありませんでした。

なぜこれが起こったのか、私はまだ混乱しています。この問題に対する私の解決策は、テーブルの代わりに div を使用することです。

編集: OK、このトピックをもう少し調査したところ、「フォーム」は<table>orの有効な子ではないことがわかりました<tr>。この問題を解決するため<%= form_for %>に、最初の の内側にタグ<td>を配置<% end %>し、最後の の内側にタグを配置しました<td>。今では完璧に機能しています!私のパーシャルは次のようになります。

<tr id="test">
    <td class="input">
      <%= form_for Client.find(27), :method => :PUT do |f| %>
      <%= f.text_field :name, :value => "Test" %>
    </td>
    <td class="input">
      <%= f.text_field :company %>
    </td>
    <td class="input">
      <%= f.text_field :email %>
    </td>
    <td class="grayedOut"></td>
    <td class="actions">
      <%= f.submit "Confirm edit" %>
      <% end %>
    </td>
</tr>
于 2012-11-24T19:20:20.063 に答える