ruby on rails - Params become plural/incorrect on render after failing validation -


so have weird issue can't seem figure out. params[:order_id] becomes params[:orders_id] upon form submit causes errors if form fails validations.

i using cocoon nested forms on page has custom edit/update controller actions (because need control happens upon successful/failed submits differently on page same forms on other pages).

params on page load

started "/properties/99/orders/1/prop_order_wiz" 127.0.0.1 @  2017-08-20 17:33:41 -0400 processing propertiescontroller#prop_order_edit html parameters: {"property_id"=>"99", "order_id"=>"1"}   

so page loads params[:order_id] expected , use value in following form:

deeds form

<%= bootstrap_nested_form_for(@properties, url: prop_order_update_patch_path(@properties, @orders), method: "patch", layout: :horizontal) |f| %>   ...    ## cocoon fields_for _deeds_fields.html.erb... ##     <%= f.hidden_field :order_id, value: params[:order_id] %>   ## end cocoon ##   ...   <%= f.submit "save deeds", class: "btn btn-primary inline pull-right" %> <% end %> 

upon first render of page , successful submit, fine. however, if form fails validations, page render params[:orders_id] leaves params[:order_id] blank , causes errors.

i can tell following parameters submitted through form submits orders_id => 1, instead of order_id => 1, why happen?

form params (scroll way right see mean)

  parameters: {"utf8"=>"✓", "authenticity_token"=>"..", "property"=>{ "deeds_attributes"=>{"0"=>{"_destroy"=>"false", "property_id"=>"99", "order_id"=>"1", ..., "id"=>"1"}}}, "commit"=>"save deeds", "property_id"=>"99", "orders_id"=>"1"} 

in controller action i'll call @orders = order.find(params[:orders_id]) above render after @properties.save fails when renders params[:order_id] blank , params[:orders_id] has correct info.

i've been able work around calling params[:orders_id] = params[:order_id] in initial load action doesn't seem correct way go it. can tell me why happens , how fix it? i'll include custom controller actions below details. in advance!

custom controller actions

def prop_order_edit ## initial page load   @properties = property.find(params[:property_id])   @orders = @properties.orders.find(params[:order_id])   params[:orders_id] = params[:order_id]    ## temp fix ##   render 'orders/orderprocess/prop_order_wiz' end  def prop_order_update ## custom update action form submission   @properties = property.find(params[:property_id])   @orders = order.find(params[:orders_id]) ## modified temp fix   @properties.update_attributes(property_params)   respond_to |format|     format.html {                   if @properties.save                     flash[:success] = "order updated successfully"                     redirect_to prop_order_wiz_path(@properties, @orders)                   else                     @orders = order.find(params[:orders_id]) ## modified temp fix                     render 'orders/orderprocess/prop_order_wiz'                   end                  }     format.js {                 if @properties.save                   flash[:success] = "order updated successfully"                 else                   @orders = order.find(params[:orders_id]) ## modified temp fix                   flash.now[:danger] = "unable update order"                   render 'orders/orderprocess/prop_order_wiz'                 end             }   end end 

it looks relation between property model , order model has_many generate plural param when submitting form. if property has 1 order need change relation has_one , need change orders order can user order_id.


Comments

Popular posts from this blog

ubuntu - PHP script to find files of certain extensions in a directory, returns populated array when run in browser, but empty array when run from terminal -

php - How can i create a user dashboard -

javascript - How to detect toggling of the fullscreen-toolbar in jQuery Mobile? -