accepts_nested_attributes_for
和allow_destroy
是Rails框架中用于处理嵌套属性的两个方法。
accepts_nested_attributes_for
方法用于在父模型中声明接受嵌套属性的子模型。通过在父模型中调用该方法,并指定子模型的关联关系,可以实现在创建或更新父模型时同时创建或更新子模型。
allow_destroy
方法用于在父模型中声明是否允许删除关联的子模型。当设置为true时,可以通过在父模型的表单中添加一个名为_destroy
的隐藏字段,并将其值设置为1来删除关联的子模型。
下面是使用这两个方法的正确步骤:
accepts_nested_attributes_for
方法,并指定子模型的关联关系。例如,如果有一个User
模型和一个Address
模型,且一个用户可以有多个地址,可以在User
模型中添加以下代码:class User < ApplicationRecord
has_many :addresses
accepts_nested_attributes_for :addresses
end
fields_for
方法来生成子模型的表单字段。例如,在用户表单中添加地址字段的示例代码如下:<%= form_for @user do |f| %>
<%= f.label :name %>
<%= f.text_field :name %>
<%= f.fields_for :addresses do |address_fields| %>
<%= address_fields.label :street %>
<%= address_fields.text_field :street %>
<%= address_fields.label :city %>
<%= address_fields.text_field :city %>
<% end %>
<%= f.submit %>
<% end %>
permit
方法来允许接受的参数。例如,在UsersController
中的user_params
方法中添加以下代码:def user_params
params.require(:user).permit(:name, addresses_attributes: [:id, :street, :city, :_destroy])
end
UsersController
中的create
方法中添加以下代码:def create
@user = User.new(user_params)
if @user.save
# 保存成功的处理逻辑
else
# 保存失败的处理逻辑
end
end
以上是正确使用accepts_nested_attributes_for
和allow_destroy
的步骤和示例代码。
对于整型字段的使用,可以按照上述步骤进行操作,只需将表单字段的类型改为适合的整型字段类型,例如使用number_field
代替text_field
。
领取专属 10元无门槛券
手把手带您无忧上云