【发布时间】:2015-07-07 21:23:11
【问题描述】:
我在同一个视图中有两个表单 form_tag 和 form_for 。第一个(form_tag)使用它来实时搜索节点(父节点)。第二个(form_for)用它来创建一个节点(子节点)。更清楚地说,每个节点都有一个变量 (parent_id) 指向另一个节点(父节点)。
我的问题是,当我创建子节点(使用 form_for )时不知道如何分配值 parent_id ,因为我不知道如何将值从一种形式传递到另一种形式
new.html.erb
<%= form_tag ({controller: "nodes", action: "search"}), :id => "users_search" do %>
<%= text_field_tag :search, params[:search], :autocomplete => 'off' %>
<div id='users'>
<%= render 'users' %>
</div>
<% end %>
<%=form_for @node do |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 do |u| %>
<%= u.user.email %>
<%= hidden_field_tag @nodo_padre , u.id %> ...... i think...
<% end %>
请求
参数:
{"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 < ? AND ocuped = ?",2,true).first
else
@node_incomplete = @users.first.nodes.where(" sons < ? AND ocuped = ?",2,true).first
end
@son_of_incompleted_node = @node_incomplete.children
end
respond_to do |format|
format.html
format.js { render }
end
end
def create
@node = Node.new(node_params)
@node.parent_id = @parent.id
respond_to do |format|
if @node.save
format.html { redirect_to @node, notice: 'Node was successfully 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
【问题讨论】:
-
如果您使用嵌套表单,则不必将值从一个控制器传递到另一个控制器。你熟悉
accepts_nested_attributes_for吗? -
可以嵌套 form_tag 和 form_for 吗?我考虑过这个选项,但我没有找到该案例的文档。
-
我不知道你是否可以在form_for中嵌套一个form_tag,但是我想知道你是否必须这样做,因为父节点和它的子节点都有一个关联的模型(意味着嵌套一个form_for子在 form_for 父级内很好)。更重要的是,我想知道嵌套表单是否在自引用关系中起作用。您的 node.rb 是否设置为 this?
-
我的问题是我无法在 form_for 中运行 AJAX(实时搜索)。出于某种原因,它不适用于 form_for ,并且适用于 form_tag ,因此为避免出现重大问题,我不这样做。但是如果没有其他解决方案...
-
你有
<%= f.hidden_field :parent_id, :value => @nodo_padre %>但@nodo_padre来自哪里?您能否在模型中建立关系以允许@node.parent工作?
标签: ruby-on-rails ruby forms ruby-on-rails-4