ruby on rails - Pass params between forms in the same view RoR -
i have 2 forms in same view form_tag , form_for . first ( form_tag ) use make live search of node ( parent node ) . second ( form_for ) use create node ( child node ) . clearer , each node has variable ( parent_id ) pointing node ( parent node ) .
my problem when create child node (with form_for ) not know how assign value parent_id , because not know how pass value 1 form another
new.html.erb
<%= form_tag ({controller: "nodes", action: "search"}), :id => "users_search" %> <%= text_field_tag :search, params[:search], :autocomplete => 'off' %> <div id='users'> <%= render 'users' %> </div> <% end %> <%=form_for @node |f| %> <%= f.hidden_field :parent_id, :value => @nodo_padre %> <%= f.hidden_field :user_id, :value => current_user.id %> <%= f.hidden_field :ocuped, :value => true %> <%= f.text_field :custom_node_name %> <%= f.check_box :terms_of_service,{}, true,false %> <%= f.submit "pagar", class: "button postfix" %> <% end %> _users.html.erb
<% if not @parent.nil? %> <% @parent.each |u| %> <%= u.user.email %> <%= hidden_field_tag @nodo_padre , u.id %> ...... think... <% end %> request
parameters:
{"utf8"=>"✓", "authenticity_token"=>"nz7hu0sbrv49b2ay/rw0c6nak8dno4ra7ykm5val0q+0d9yfsa5/po3boouuxxx+k04mp5dzhnojzandtoyomw==", "node"=>{"parent_id"=>"", "user_id"=>"4", "ocuped"=>"true", "custom_node_name"=>"mi primera red", "terms_of_service"=>"true"}, "commit"=>"pagar"} nodes_controller.rb
def new @node = node.new end def search @node = node.new @parent = node.search(params[:search]).where(:ocuped => true) if not @users.nil? if @users.count == 1 @node_incomplete = @users.nodes.where(" sons < ? , ocuped = ?",2,true).first else @node_incomplete = @users.first.nodes.where(" sons < ? , ocuped = ?",2,true).first end @son_of_incompleted_node = @node_incomplete.children end respond_to |format| format.html format.js { render } end end def create @node = node.new(node_params) @node.parent_id = @parent.id respond_to |format| if @node.save format.html { redirect_to @node, notice: 'node created.' } format.json { render :show, status: :created, location: @node } else format.html { render :new } format.json { render json: @node.errors, status: :unprocessable_entity } end end end
it not matter how build forms (form_for, form_tag, simple_form_for...). result in <form> in rendered html template. forms "live" on client side (browser). if submit form, form elements (elements <input>, <textarea>, <select>) submited server.
it's not valid nest <form> tags, must not have <form> tag inside <form> tag. valid though have multiple <form> tags on single page.
when want share information between <form> elements, can use javascript "transfer" value 1 <form> another.
say want know parent node id when second form submitted:
- register change listener on parent node id element in first form
- on change, read value, write hidden field on second form
assuming use jquery: might find useful: https://api.jquery.com/change/
or can set parent node id hidden field when it's selected in live search.
in case: unless present in <form> won't submitted server. solution use hidden field.
Comments
Post a Comment