首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Rails表单,以一种形式创建多个父母和子女

在Rails中,创建多个父母和子女的表单可以通过使用accepts_nested_attributes_for方法和fields_for方法来实现。

首先,在父母模型中定义accepts_nested_attributes_for方法,并允许子女模型的属性。例如,如果父母模型是Parent,子女模型是Child,则可以在Parent模型中添加以下代码:

代码语言:ruby
复制
class Parent< ApplicationRecord
  has_many :children
  accepts_nested_attributes_for :children, allow_destroy: true
end

这将允许在父母模型的表单中创建、更新和删除子女模型的记录。

接下来,在表单中使用fields_for方法来创建子女模型的表单。例如,在ParentsControllernewedit方法中,可以添加以下代码:

代码语言:ruby
复制
def new
  @parent = Parent.new
  3.times { @parent.children.build }
end

def edit
  @parent = Parent.find(params[:id])
  3.times { @parent.children.build }
end

这将为父母模型创建3个子女模型的实例。

然后,在表单中使用fields_for方法来创建子女模型的表单。例如,在app/views/parents/_form.html.erb文件中,可以添加以下代码:

代码语言:html
复制
<%= form_with(model: parent) do |f| %>
  <%= f.label :name %>
  <%= f.text_field :name %>

  <%= f.fields_for :children do |child_form| %>
    <%= child_form.label :name, "Child Name" %>
    <%= child_form.text_field :name %>
  <% end %>

  <%= f.submit "Submit" %>
<% end %>

这将为每个子女模型创建一个表单,并在提交时将所有子女模型的数据一起保存到父母模型中。

最后,在ParentsController中的createupdate方法中,可以添加以下代码来处理表单提交:

代码语言:ruby
复制
def create
  @parent = Parent.new(parent_params)

  if @parent.save
    redirect_to @parent
  else
    render :new
  end
end

def update
  @parent = Parent.find(params[:id])

  if @parent.update(parent_params)
    redirect_to @parent
  else
    render :edit
  end
end

private

def parent_params
  params.require(:parent).permit(:name, children_attributes: [:id, :name, :_destroy])
end

这将保存父母模型和子女模型的数据,并在出现错误时重新渲染表单。

总之,使用accepts_nested_attributes_forfields_for方法可以轻松地在Rails中创建多个父母和子女的表单。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

没有搜到相关的沙龙

领券