0

accepts_nested_attributes_for создания дубликатовaccepts_nested_attributes_for создание дубликатов

Модель

class Article < ActiveRecord::Base 
    has_many :article_collections 
    accepts_nested_attributes_for :article_collections, :allow_destroy => true, reject_if: :all_blank 
end 

class ArticleCollection < ActiveRecord::Base 
    belongs_to :article 
end 

Контроллер

def update 
    @article = Article.find_by_id(params[:id]) 
    @article.update_attributes(params[:article]) 
    redirect_to :index 
end 

Params

params = {"utf8"=>"✓" 
    "article"=> 
    { 
    "data_id"=>"dfe9e32c-3e7c-4b33-96b6-53b123d70e7a", "name"=>"Mass", "description"=>"mass", 
    "status"=>"active", "volume"=>"dfg", "issue"=>"srf", "iscode"=>"sdg", 
     "image"=>{"title"=>"", "caption"=>"", "root_image_id"=>""}, 
    "article_collections_attributes"=> 
    [ 
    {"name"=>"abcd", "type"=>"Special", "description"=>"content ","ordering_type"=>""} 
    ] 
    }, 
"commit"=>"Save", "id"=>"b8c8ad67-9b98-4705-8b01-8c3f00e55919"} 

консоли

Article.find("b8c8ad67-9b98-4705-8b01-8c3f00e55919").article_collections.count 
=> 2 

Проблема возникает, когда мы обновляем статью, создавая несколько article_collections.

Предположим, что article_collections равно 2, если мы обновляем статью, она создает несколько article_collections = 4, это не обновление тех же article_collections, что и новое создание article_collections.

Почему это создает дубликаты?

+0

Почему у вас есть 'params [: article]', когда вы используете *** Rails 4 ***? – Pavan

+0

Пожалуйста, разместите ваши мнения в форме. –

ответ

3

Ваш Титулы:

params = {"utf8"=>"✓" 
    "article"=> 
    { 
    "data_id"=>"dfe9e32c-3e7c-4b33-96b6-53b123d70e7a", "name"=>"Mass", "description"=>"mass", 
    "status"=>"active", "volume"=>"dfg", "issue"=>"srf", "iscode"=>"sdg", 
     "image"=>{"title"=>"", "caption"=>"", "root_image_id"=>""}, 
    "article_collections_attributes"=> 
    [ 
    {"name"=>"abcd", "type"=>"Special", "description"=>"content ","ordering_type"=>""} 
    ] 
    }, 
"commit"=>"Save", "id"=>"b8c8ad67-9b98-4705-8b01-8c3f00e55919"} 

Вы должны послать и разрешить атрибут "ID" внутри "article_collections_attributes" Params. Например,

"article_collections_attributes"=> 
    [ 
    {"id"=>"2", "name"=>"abcd", "type"=>"Special", "description"=>"content ","ordering_type"=>""} 
    ] 

Я думаю, что этот код вам поможет.

+1

Да @Thirumal Sakthivel мы пропустили id – VtrKanna

0

Подробнее о вложенном атрибуте и его создании.
В вашем объекте сборки редактирования, если у него нет статьи.
Для примера. @article.article_collection.build if @article.article_collection.blank?. он не будет создавать новый объект, если у него уже есть коллекция статей.

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