ruby on rails - Can't Edit Item - <% if @user.errors.any? %> -


im using simple form gem.

when try update item invalid data instancing missing out information price. rails suppose redirect edit view. can see controller.

blow update method items controller

  def update     @item = item.find(params[:id])     if @item.update(item_params)        redirect_to @item        flash[:success] = 'item updated.'     else       flash[:danger] = "item didn't update"       render "edit"     end   end 

however doesn't. error.

showing

/users/josep/documents/safsy/website/safsy/safsy/app/views/shared/_error_messages.html.erb line #1 raised:  undefined method `errors' nil:nilclass  <% if @user.errors.any? %>   <div id="error_explanation">     <div class="alert alert-danger">       form contains <%= pluralize(@user.errors.count, "error") %>.     </div>     <ul> 

below _error.messages.html.erb

<% if @user.errors.any? %>   <div id="error_explanation">     <div class="alert alert-danger">       form contains <%= pluralize(@user.errors.count, "error") %>.     </div>     <ul>     <% @user.errors.full_messages.each |msg| %>       <li><%= msg %></li>     <% end %>     </ul>   </div> <% end %> 

partial rendered inside applications.html.erb

<!doctype html> <html>   <head>     <%= stylesheet_link_tag 'application', media: 'all',                                            'data-turbolinks-track' => true %>     <%= javascript_include_tag 'application', 'data-turbolinks-track' => true %>     <%= csrf_meta_tags %>     <meta name="viewport" content="width=device-width, initial-scale=1.0">     <link href='https://fonts.googleapis.com/css?family=raleway:500,900,200' rel='stylesheet' type='text/css'>      <!--[if lt ie 9]>       <script src="//cdnjs.cloudflare.com/ajax/libs/html5shiv/r29/html5.min.js">       </script>     <![endif]-->   <title>safsy - safest way shop</title>   </head>   <body>     <%= render 'layouts/header' %>     <%= yield :sliderhome %>     <div class="container">       <% flash.each |message_type, message| %>         <div class="alert alert-<%= message_type %>"><%= message %></div>       <% end %>       <%= yield %>     </div>     <%= render 'layouts/footer' %>   </body> </html> 

views/items/edit.html.erb

<div class="page-header">   <h1><%=@item.title  %> <small> edit</small></h1> </div>  <div class="container">   <div class=“row”>     <div class="col-md-6 col-md-offset-3">       <div class="panel panel-primary">         <div class="panel-body">           <%= render 'shared/error_messages' %>           <%= simple_form_for @item |f| %>             <%= f.input :image%>             <%= f.input :title%>             <%= f.input :price %>             <%= f.input :description %>             <%= f.button :submit, "save changes", class: "btn btn-primary" %>           <% end %>         </div>       </div>         </div>   </div> </div> 

thanks in advance

the error coming because error partial has @user object, form has @item object, below solution

make error partial work every object, in item form change render 'shared/error_messages' line this

<%= render 'shared/error_messages', form_object: @item %> 

and change _error_messages.html.erb to

<% if form_object.errors.any? %>   <div id="error_explanation">     <div class="alert alert-danger">       form contains <%= pluralize(form_object.errors.count, "error") %>.     </div>     <ul>     <% form_object.errors.full_messages.each |msg| %>       <li><%= msg %></li>     <% end %>     </ul>   </div> <% end %> 

so using partial in application layout, pass form object in partial have done above! resolve problem!

in way, error fixed , code dry up. hope helps!


Comments