Railsがパラメータエラーとしてオブジェクトを送信しない
概要
私は記事を処理するコントローラーを持っており、最近そのように編集および作成アクションを実装しました。
def edit
@article = Article.find(params[:id])
end
def update
@article = Article.find(params[:id])
if @article.update(article_params)
redirect_to @article
else
render :edit, status: :unprocessable_entity
end
end
記事を編集しようとすると、次のメッセージが表示されたエラーが発生します: スクリーンショット
このようにフォーム部分を使用してレイアウトをロードしています。
<%= render "form", article: @article %>
新しい記事を保存しようとした後、編集アクションは適切に機能し、要件を満たさずに保存しようとすると本文のエラー メッセージは表示されません。この問題を解決するにはどうすればよいでしょうか? 前もって感謝します。
解決策
レンダリング エラーを処理するには、より良い方法があります。フォーム ビルダーによってラップされたオブジェクトにアクセスするだけです。
<%= form_with(model: article) do |form| %>
<% if form.object.errors.any? %>
<ul>
<% form.object.each do |error| %>
<li><%= error.full_message %></li>
<% end %>
</ul>
<% end %>
# ...
<% end %>
これにより、フォームでラップされたモデル インスタンスに対応する変数の名前を知らなくても、エラー メッセージのレンダリングを DRY で終了できます。
ただし、古典的な nil エラーもあります。@article はおそらく nil です。また、質問にあるコードを額面通りに受け取ると再現できないため、これは私たちが実際に解決できる問題ではありません。 stackoverflow でよくあることですが、実際の問題は画像の外のどこかに潜んでいます。
このコードをデバッグするには、実行していると思われるコードが実際に実行されていることを確認し、一連のブレークポイントを設定して、それが実際に設定され、ビューに正しく渡されていることを確認する必要があります。