在Rails 4中删除未使用的嵌套记录更新模型

时间:2014-10-26 17:46:05

标签: ruby-on-rails

有两种型号:BeautySalonCategory和BeautySalonService:

class BeautySalonCategory < ActiveRecord::Base

    has_many :beauty_salon_services, dependent: :destroy
    accepts_nested_attributes_for :beauty_salon_services, allow_destroy: true

end

class BeautySalonService < ActiveRecord::Base

    belongs_to :beauty_salon_category

end

在控制器中:

    def category_params
        params.require(:beauty_salon_category).permit(:name, beauty_salon_services_attributes: [:name, :cost, :duration, :id] )
    end

我使用category_params创建一个带有相关BeautySalonService对象的新BeautySalonCategory对象。有用。此外,我想做以下事情:当一个BeautySalonCategory对象被更新时,将删除未使用的相关BeautySalonService对象(例如,一个类别有3个相关服务,而不是我用这3个服务中只有一个服务更新此类别 - 我希望其他2项服务将被删除)。你能帮助我吗?

def update
    @category = business.beauty_salon_categories.find(params[:id])
    @category.update!(category_params)

end

1 个答案:

答案 0 :(得分:0)

您需要将:_destroy字段添加到允许的参数:

params.require(:beauty_salon_category).permit(:name, 
  beauty_salon_services_attributes: [:name, :cost, :duration, :id, :_destroy])

并增加部分美容院服务:

<%= f.check_box :_destroy %>
<%= f.label :_destroy, "Remove" %>

我认为这样就可以了。