私は 2 つのコントローラーの雑誌と記事を持っています。記事は雑誌のネストされたルートです。私がいるとき/magazines/show
、記事を作成するための基本的なフォームがあります
<%= form_for @article, :url => magazine_articles_path(@magazine), remote: true do |f| %>
<%= render 'shared/error_messages', target: @article %>
<%= f.text_field :name %>
<%= f.submit %>
<% end %>
これが送信されると、記事コントローラーに送信されます。記事コントローラーで、このフォームを再レンダリングするアクションをレンダリングします (エラーがあればそれを取り除くためにフォームを再レンダリングしています)
$('#id').html('<%= escape_javascript render partial: 'create_article' %>');
ただし、これにより、フォームのアクションが/magazines/:id/articles
代わりに変更されます/magazines/:id
初期フォーム:
<form id="new_article" class="new_article" method="post" data-remote="true" action="/magazines/1/articles" accept-charset="UTF-8">
再レンダリング後のフォーム:
<form id="edit_article_3" class="edit_article" method="post" data-remote="true" action="/magazines/1/articles" accept-charset="UTF-8">
これによりルーティングが台無しになり、このフォームを再度送信しようとするとルーティング エラーが発生します。@article
newが article コントローラーから来ているので、これが起こっていると思います。これがどのように発生するかについてもう少し詳しく説明し、それを回避するためのクリーンなソリューションを提供していただければ幸いです。本当にありがとう!