上传多个图片的Rails和carrierwave失败

时间:2016-09-01 19:49:06

标签: ruby-on-rails ruby-on-rails-4 carrierwave simple-form

你好 我有一个表格,我可以写一些文章,标题,内容,主要图像,它们都来自同一模型进展 在这个相同的形式我有另一个模型 progress_attachment 的另一个字段我用它来上传多个图像。 (我使用了carrierwave,并以SSR solution 为例)

适用于title date content main image

但是多个文件上传的字段允许一个图像...它应该接受多个...出了什么问题?

所以这是我的表格:

 = simple_form_for(@progress, html: { multipart: true} ) do |f|
   =f.input :title
   =f.input :date
   =f.input :content
   =f.input :main_image
   =f.simple_fields_for :progress_attachments do |f|
     =f.input :image, multiple: true, name: "progress_attachments_attributes[:image][]"
   =f.button :submit 

我的模特:

progress.rb

class Progress < ActiveRecord::Base
  default_scope ->{order(created_at: :DESC)}
  mount_uploader :main_image, MainImageUploader
  has_many :progress_attachments
  accepts_nested_attributes_for :progress_attachments

  validates :main_image,   presence: true
  validates :title,   presence: true
  validates :content,  presence: true
  validates :date,    presence: true
end

progress_attachment.rb

class ProgressAttachment < ActiveRecord::Base
  mount_uploader :image, ImageUploader
  belongs_to :progress
  validates :image, presence: true
end

我的控制器: progresses_controller.rb

class ProgressesController < ApplicationController

  def index
    @progresses = Progress.all
  end

  def show
    @progress = Progress.find(params[:id])
    @progress_attachments = @progress.progress_attachments.all
  end

  def new
     @progress = Progress.new
     @progress_attachment = @progress.progress_attachments.build
  end

  def create
     @progress = Progress.new(progress_params)

     respond_to do |format|
       if @progress.save
         params[:progress_attachments]['image'].each do |a|
            @progress_attachment = @progress.progress_attachments.create!(:image => a)
         end
         format.html { redirect_to progresses_path, notice: 'Progress was successfully created.' }
       else
         format.html { render action: 'new' }
       end
     end
   end

   def update
     respond_to do |format|
       if @progress.update(article_params)
         format.html { redirect_to @progress, notice: 'Article was successfully updated.' }
         format.json { render :show, status: :ok, location: @progress }
       else
         format.html { render :edit }
         format.json { render json: @progress.errors, status: :unprocessable_entity }
       end
     end
   end

   def destroy
     @progress.destroy
     respond_to do |format|
       format.html { redirect_to articles_url, notice: 'Article was successfully destroyed.' }
       format.json { head :no_content }
     end
   end
   private
     def progress_params
        params.require(:progress).permit(:title, :content, :date, :main_image, progress_attachments_attributes: [:id, :progress_id, :image])
     end

end

progress_attachements_controller.rb

class ProgressAttachmentsController < ApplicationController
  before_action :set_progress_attachment, only: [:show, :edit, :update, :destroy]

  def index
    @progress_attachments = ProgressAttachment.all
  end

  def new
    @progress_attachment = ProgressAttachment.new
  end

  def create
    @progress_attachment = ProgressAttachment.new(progress_attachment_params)
    @progress_attachment = @progress.progress_attachments.build
    respond_to do |format|
      if @progress_attachment.save
        format.html { redirect_to @progress_attachment, notice: 'Progress attachment was successfully created.' }
        format.json { render :show, status: :created, location: @progress_attachment }
      else
        format.html { render :new }
        format.json { render json: @progress_attachment.errors, status: :unprocessable_entity }
      end
    end
  end

  def update
    respond_to do |format|
      if @progress_attachment.update(progress_attachment_params)
        format.html { redirect_to @progress_attachment, notice: 'Progress attachment was successfully updated.' }
        format.json { render :show, status: :ok, location: @progress_attachment }
      else
        format.html { render :edit }
        format.json { render json: @progress_attachment.errors, status: :unprocessable_entity }
      end
    end
  end

  def destroy
    @progress_attachment.destroy
    respond_to do |format|
      format.html { redirect_to progress_attachments_url, notice: 'Progress attachment was successfully destroyed.' }
      format.json { head :no_content }
    end
  end

  private

    def set_progress_attachment
      @progress_attachment = ProgressAttachment.find(params[:id])
    end

    def progress_attachment_params
      params.require(:progress_attachment).permit(:progress_id, :image)
    end
end

非常感谢帮助,非常感谢!

1 个答案:

答案 0 :(得分:0)

我的多张图片现在可以使用了!

我换了:

#if defined

通过

#ifdef