accept_nested_attributes_for :allow_destroy, :_destroy 不工作
accept_nested_attributes_for :allow_destroy, :_destroy not working
我有一个 Rails 4.1 应用程序,它使用了一些著名的技术。
简单的形式,茧
我在销毁作为嵌套属性的记录时遇到问题。基于一些冗长的研究,我相信我的代码是正确的,但是我可能遗漏了一些愚蠢的东西。
型号
has_many :staff_services_joins, :dependent => :destroy
has_many :services, :through => :staff_services_joins
accepts_nested_attributes_for :staff_services_joins, :allow_destroy => true
有点不正统,但是我在连接模型上有两个组件不是外键,需要设置。这就是为什么我接受连接模型而不是服务模型的嵌套属性。
控制器方法
def update
ap staff_params
# if @staff_member.update_with_account staff_params, params[:password]
if @staff_member.update_attributes staff_params
flash[:notice] = 'Successfully updated staff member! :)'
redirect_to vendor_store_staff_path current_store, @staff_member
else
flash[:error] = 'Failed to update staff member :('
render :edit
end end
强参数
params.require(:staff).permit(
:user_id,
:store_id,
:avatar,
:remote_avatar_url,
:first_name,
:last_name,
:email,
:active,
:admin,
:staff_services_joins_attributes => [
:staff_id,
:service_id,
:price,
:duration,
:_destroy
]
)
示例更新参数散列
{
"store_id" => "2",
"avatar" => "avatar.png",
"remote_avatar_url" => "",
"first_name" => "Joshua",
"last_name" => "Tyree",
"email" => "joshuat@createthebridge.com",
"active" => "0",
"admin" => "1",
"staff_services_joins_attributes" => {
"0" => {
"service_id" => "2",
"price" => "50.00",
"duration" => "30",
"_destroy" => "1"
}
}
}
根据历史,这东西应该会破坏那个模型,但出于某种原因它肯定不是。非常感谢任何帮助。
为了将 accepts_nested_attributes_for
与 强参数 一起使用,您需要指定哪些嵌套属性应该 列入白名单 。你做到了,但你错过了添加执行 删除 操作所需的 :id
。 "_destroy"
键将记录标记为删除,但要找到记录并在内部删除 ,它需要 :id
存在。
您可以阅读Removing Objects指南。
我有一个 Rails 4.1 应用程序,它使用了一些著名的技术。
简单的形式,茧
我在销毁作为嵌套属性的记录时遇到问题。基于一些冗长的研究,我相信我的代码是正确的,但是我可能遗漏了一些愚蠢的东西。
型号
has_many :staff_services_joins, :dependent => :destroy
has_many :services, :through => :staff_services_joins
accepts_nested_attributes_for :staff_services_joins, :allow_destroy => true
有点不正统,但是我在连接模型上有两个组件不是外键,需要设置。这就是为什么我接受连接模型而不是服务模型的嵌套属性。
控制器方法
def update
ap staff_params
# if @staff_member.update_with_account staff_params, params[:password]
if @staff_member.update_attributes staff_params
flash[:notice] = 'Successfully updated staff member! :)'
redirect_to vendor_store_staff_path current_store, @staff_member
else
flash[:error] = 'Failed to update staff member :('
render :edit
end end
强参数
params.require(:staff).permit(
:user_id,
:store_id,
:avatar,
:remote_avatar_url,
:first_name,
:last_name,
:email,
:active,
:admin,
:staff_services_joins_attributes => [
:staff_id,
:service_id,
:price,
:duration,
:_destroy
]
)
示例更新参数散列
{
"store_id" => "2",
"avatar" => "avatar.png",
"remote_avatar_url" => "",
"first_name" => "Joshua",
"last_name" => "Tyree",
"email" => "joshuat@createthebridge.com",
"active" => "0",
"admin" => "1",
"staff_services_joins_attributes" => {
"0" => {
"service_id" => "2",
"price" => "50.00",
"duration" => "30",
"_destroy" => "1"
}
}
}
根据历史,这东西应该会破坏那个模型,但出于某种原因它肯定不是。非常感谢任何帮助。
为了将 accepts_nested_attributes_for
与 强参数 一起使用,您需要指定哪些嵌套属性应该 列入白名单 。你做到了,但你错过了添加执行 删除 操作所需的 :id
。 "_destroy"
键将记录标记为删除,但要找到记录并在内部删除 ,它需要 :id
存在。
您可以阅读Removing Objects指南。