def new
@article = Article.new
end
def create
@article = Article.new(article_params)
if @article.save
redirect_to @article
else
render 'new' #<--
end
end
あなたは私が矢を持ってラインを見れば、ロジックがあります新しい記事を保存する際にエラーが発生した場合、render 'new'
(new
ルートに当てはまるでしょうか?)を再度実行してフォームをレンダリングして、エラーを修正して再送信してください。
私の質問は、新しいルートはどのようにエラーがあったのか分かりますか? @article.save
が失敗したときにエラーを送信する背景に何か起こっていますか?
新しいルートが新しい記事オブジェクトを作成してビューに送信するので、私は混乱します。エラーはどのように保存されていますか? が新しいルートに当たった、新しい記事を保存中にエラーが、私は「新しい」描画する必要がある場合...
<h1>
file thing add
</h1>
<%= link_to 'Back', articles_path %>
<%= form_for :article, url: articles_path do |f| %>
<% if @article.errors.any? %>
<div id="error_explanation">
<h2>
<%= pluralize(@article.errors.count, "error") %> prohibited
this article from being saved:
</h2>
<ul>
<% @article.errors.full_messages.each do |msg| %>
<li><%= msg %></li>
<% end %>
</ul>
</div>
<% end %>
<p>
<%= f.label :title %><br>
<%= f.text_field :title %>
</p>
<p>
<%= f.label :text %><br>
<%= f.text_area :text %>
</p>
<p>
<%= f.submit %>
</p>
<% end %>
待って、ウズベキョンは記事にリダイレクトしないと言っています(これは 'render'ではないので 'redirect_to')...正しいシナリオですか? –
申し訳ありませんが、上記のレンダリング/リダイレクトが混在している可能性があります。一般的にGETリクエスト以外は何もレンダリングしないでください。CREATEING、PUTING、PATCHING、DELETEINGの場合は、適切なGETリソース – erikdstock
にリダイレクトする必要があります。コントローラ全体がインスタンス化されていることを覚えておくことも重要ですあなたの要求に対して、その内部オブジェクト(インスタンス変数)を動作させることができます.- 'redirect_to'は、いくつかの追加の魔法の魔法を投げたメソッドです。 – erikdstock