0

Carrierwave gem を使用して、アタッチメント モジュールをアプリケーションに追加しています。そのために、次のAttachableような名前のモデル懸念を作成しました。

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ため、変更を保存すると、空のファイルで添付ファイルの数が複製されます。

定義されている場合にのみ、それを修正して添付ファイルをアップロード/保存するにはどうすればよいですか?

ありがとう

編集:
これ が私のビューソースです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
4

1 に答える 1

0

わかりました、ついに解決策を見つけました。reject_ifas で使用する必要がありましaccepts_nested_attributes_forた:

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

それは魅力のように機能します:)

于 2013-10-01T21:01:53.283 に答える