2014-09-06 3 views
2

Я использую decent_exposure gem и cocoon gem для вложенных форм и после каждого создания или обновления я получаю повторяющиеся записи. Что я делаю не так? X_Xpositive_exposure создает двойные записи каждый раз

Контроллер

class Admin::DealsController < ApplicationController 
    expose :deals 
    expose :deal, attributes: :deal_params 

    def create 
    if deal.save 
     redirect_to [:admin, deal], notice: 'Deal was successfully created.' 
    else 
     render :new 
    end 
    end 

    def update 
    if deal.update(deal_params) 
     redirect_to [:admin, deal], notice: 'Deal was successfully updated.' 
    else 
     render :edit 
    end 
    end 

    private 

    def deal_params 
    params.require(:deal).permit :title, :end_date, 
           deal_variants_attributes: [:id, :title, :description, :price, :discount, :_destroy] 
    end 
end 

Модель

class Deal < ActiveRecord::Base 
    has_many :deal_variants 

    accepts_nested_attributes_for :deal_variants, reject_if: :all_blank, allow_destroy: true 
end 

Спасибо заранее!

ответ

0

Я встретил ту же проблему сегодня, и вот мое решение и объяснение:

Это происходит потому, что decent_exposure уже устанавливает необходимые атрибуты для вас, и когда вы звоните .update(deal_params) он дублирует запись, так как первый экземпляр DealVariant был set by decent_exposure, и второй был set by .update(deal_params) звонок. Вместо этого вам нужно использовать простой метод .save как в действиях create, так и в действиях update.

Смежные вопросы