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
Post a Comment