Ruby on rails Rails-如何发送另一个表单中的表单?
我认为这种结构:Ruby on rails Rails-如何发送另一个表单中的表单?,ruby-on-rails,ruby,forms,nested-forms,Ruby On Rails,Ruby,Forms,Nested Forms,我认为这种结构: <%= simple_form_for @user ... %> ... ... <%= render '/hobbies/form', :user => @user %> ... ... <% end %> ... ... @用户%> ... ... 渲染部分从部分加载数据-有一个表单。表单字段已成功加载(如输入、提交输入、单选按钮等),但当我查看生成的HTML时,呈现的表单中缺少嵌套表单。要实现这一点,您必
<%= simple_form_for @user ... %>
...
...
<%= render '/hobbies/form', :user => @user %>
...
...
<% end %>
...
...
@用户%>
...
...
渲染部分从部分加载数据-有一个表单。表单字段已成功加载(如输入、提交输入、单选按钮等),但当我查看生成的HTML时,呈现的表单中缺少嵌套表单。要实现这一点,您必须取消表单嵌套或使用javascript。如果您选择javascript方法,则只需捕获表单提交事件,阻止默认值,然后手动提交所需的表单 编辑:
如果你选择JavaScript方法,考虑你可能根本不需要两个表单。相反,您可以为发出ajax请求的“子操作”上的按钮添加一个单击处理程序
或者,如果javascript不是一个选项,而重新排列html也不是一个选项,您可以在服务器上处理此问题,方法是提交两个表单中的数据,并根据单击的提交输入对每个表单进行不同的处理。表单中不能有表单。如果您的关联设置正确,请执行类似操作
class User < ActiveRecord::Base
has_many :hobbies
accepts_nested_attributes_for :hobbies
end
class Hobby < ActiveRecord::Base
belongs_to :user
end
这会给你带来像
users_attributes: { name: "xyz", hobbies_attributes: { attribute: "value"} }
有关签出的详细信息很简单,您不能有两个单独的嵌套表单 您可以使用嵌套关联表单-这取决于后端模型的结构,我将在下面详细介绍 -- 表格 您需要知道的最重要的一点是Rails只是构建—这意味着它们必须遵守这些表单规定的所有约束和规则: 每个表单都有自己的
action
属性,这就是浏览器知道数据发送到哪里的方式。如果您有多个/嵌套表单,那么基本上您将有两个“action”属性;阻止HTML正确发送表单
--
嵌套的
如果您想使用一些Rails约定,最好使用accepts\u nested\u attributes\u for
方法。这驻留在模型中,为了有效地使用它,您需要确保您的设置正确:
#app/models/user.rb
Class User < ActiveRecord::Base
has_many :hobbies
accepts_nested_attributes_for :hobbies
end
#app/models/hobby.rb
Class Hobbies < ActiveRecord::Base
belongs_to :user
end
您不能有两个嵌套表单,您需要将内部表单移出。正如下面@thedeeno的回答所指出的,您可以使用JavaScript实现类似于嵌套表单的功能。非常有用,谢谢您,先生-您知道或有任何示例说明如何:“捕获表单提交事件,阻止默认设置,并手动提交所需表单。”?这将非常有用
#app/models/user.rb
Class User < ActiveRecord::Base
has_many :hobbies
accepts_nested_attributes_for :hobbies
end
#app/models/hobby.rb
Class Hobbies < ActiveRecord::Base
belongs_to :user
end
#app/controllers/users_controller.rb
Class UsersController < ApplicationController
def new
@user = User.new
@user.hobbies.build # -> essential for nested attributes
end
def create
@user = User.new(user_params)
@user.save #-> notice how this saves the @user model only?
end
private
def user_params
params.require(:user).permit(:user, :attributes, hobbies_attributes: [:hobbies, :attributes])
end
end
<%= form_for @user do |f| %>
<%= f.fields_for :hobbies do |h| %>
<%= h.text_field :your_attributes %>
<% end %>
<% end %>