Ruby on Rails编辑失败时渲染_errors partial问题求助
Let’s walk through the common issues and fixes to get your error partial working correctly when an edit fails:
1. Complete the Error List Loop in Your Partial
First, your partial code is cut off—you need to finish looping through the error messages. Here’s the corrected full _errors.html.erb:
<% if obj.errors.any? %> <div class="row"> <div class="col-md-8 col-md-offset-2 col-xs-12"> <div class="panel panel-danger"> <div class="panel-heading"> <h2 class="panel-title"> <%= pluralize(obj.errors.count, "error") %> prohibited this form from being saved: </h2> </div> <div class="panel-body"> <ul> <% obj.errors.full_messages.each do |message| %> <li><%= message %></li> <% end %> </ul> </div> </div> </div> </div> <% end %>
Note: I fixed the typo "prohibided" to "prohibited" here too.
2. Ensure You’re Passing the Correct Object to the Partial
In your edit.html.erb (or wherever you render the partial), make sure you’re passing the instance variable that holds your model (e.g., @post, @user) as the obj local variable:
<!-- At the top of your edit form --> <%= render 'errors', obj: @your_model_instance %> <%= form_for @your_model_instance do |f| %> <!-- Your form fields go here --> <% end %>
3. Fix the Controller’s Update Action
The biggest mistake people make is redirecting instead of re-rendering the edit template when the update fails. Redirecting clears the error messages stored in the instance variable. Your update action should look like this:
def update @your_model_instance = YourModel.find(params[:id]) if @your_model_instance.update(your_model_params) redirect_to @your_model_instance, notice: "#{YourModel.model_name.human} updated successfully!" else # Re-render the edit template—this keeps the errors in @your_model_instance render :edit end end
4. Double-Check Partial Placement
Make sure the partial is rendered inside the edit view (not the layout or another template) so it’s visible when the edit form reloads after a failed submission.
5. Verify CSS Visibility (Optional)
If you still don’t see the error panel, check if any custom CSS is hiding it. The Bootstrap classes you’re using (panel panel-danger) should make it visible by default, but it’s worth confirming there’s no display: none or similar rule targeting it.
If you follow these steps, your error partial should correctly render all validation messages when an edit operation fails.
内容的提问来源于stack exchange,提问作者Joao Quaresma

