2013-10-01 6 views
0

Я использую самоцвет Carrierwave, чтобы добавить модуль приложения в мое приложение. Для этого я создал модель беспокойство по имени Attachable следующим образом:Rails 4 Повторяющиеся записи Carrierwave при обновлении

module Attachable 
    extend ActiveSupport::Concern 

    included do 
    has_many :attachments, as: :attachable, dependent: :destroy 
    accepts_nested_attributes_for :attachments 
    end 
end 

который я звоню в мой пост модели:

class Post < ActiveRecord::Base 
    include Attachable 
end 

Когда она отлично работает для сохранения нового сообщения:

def create 
    @post = current_user.posts.new(post_params) 
    if @post.save 
    redirect_to post_path(@post.slug) 
    else 
    @categories = Term.get_category 
    render :new 
    end 
end 

это фактически дублируют мои записи (базы данных), когда я обновляю:

def update 
    @post.clean_taxonomies 
    if @post.update(post_params) 
    redirect_to post_path(@post.slug) 
    else 
    @categories = Term.get_category 
    render :edit 
    end 
end 

При редактировании он заполняет все заголовок вложения (имя поля: строка в моей таблице), но поскольку он не может повторно заполнить имя файла в input field, при сохранении изменений он дублирует количество вложений с пустым файлом ,

Как я могу исправить это и загрузить/сохранить вложение только в том случае, если он был определен?

Благодаря

EDIT:
Вот мой взгляд на источник posts/edit.html.haml (такой же, как new.html.haml):

= form_for @product, url: product_path(@product.slug), html: { multipart: true } do |f| 
    = f.fields_for :attachments do |attachment| 
    .row.attachment 
     .col-sm-6 
     = attachment.label :name, 'Filename' 
     = attachment.text_field :name, class: 'form-control' 
     .col-sm-5.col-xs-9 
     = attachment.label :file, 'File' 
     = attachment.file_field :file, class: 'form-control' 
     .col-sm-1.col-xs-1 
     %a.remove-attachment{ href: '#' } 
      %i.icon-remove-circle.icon-2x 
+0

ли вы разместить свой вид? Вероятно, проблема очень велика. – Taavo

+0

Привет, спасибо за ваш ответ. Я редактировал свой пост и добавил код просмотра. благодаря – lkartono

ответ

0

Ok я, наконец, нашел решение. Мне нужно использовать reject_if на моем accepts_nested_attributes_for как:

accepts_nested_attributes_for :attachments, 
           allow_destroy: true, 
           reject_if: lambda { |a| a['file'].blank? } 

Он работает как шарм :)

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