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