Rails ArticlesController#create 中的载波多文件上传 Encoding::UndefinedConversionError

Rails carrierwave multiple file upload Encoding::UndefinedConversionError in ArticlesController#create

我是用railsgem carrierwave测试多张上传图片

下面是我一步步来的

配置Article model uploader

class Article < ApplicationRecord
  mount_uploader :avatar, AvatarUploader
end

配置 _form.html.erb 用于使用图片创建文章

<%= form_for @article, html: {multipart: true} do |f| %>
    <p>
        <%= f.label :title %>
        <%= f.text_field :title %>
    </p>
    <p>
        <%= f.file_field :avatars%>
    </p>
    <p>
        <%= f.label :body %>
        <%= f.text_area :body %>
    </p>

    <p>
        <%= f.submit %>
    </p>
<% end %>

article_controller

class ArticlesController < ApplicationController
  def new
    @article = Article.new
  end

  def create
    @article = Article.new(article_params)
    @article.save
    render "show"
  end

  def show
    @article = Article.find(params[:id])
  end

  private 

  def article_params
    params.require(:article).permit(:title, :body, :avatar)
  end
end

这里可以用文章创建一张图片

下面是尝试创建多个图像

改变_form.html.erb

<p>
    <%= f.file_field :avatars, multiple: true%>
</p>

因为我使用的测试数据库是 sqlite3 所以,引用来自 cariierwave

class Article < ApplicationRecord
  mount_uploader :avatar, AvatarUploader
  serialize :avatars, JSON
end

更改articles_controller强参数

  def article_params
    params.require(:article).permit(:title, :body, {avatars: []})
  end

现在应该创建多个图像

当我尝试创建时发现了这个错误

和终端消息

在模型 Article 中装载 avatars 而不是 avatar

并将您的列 avatar 更改为:

def change
    remove_column :articles, :avatar
    add_column :articles, :avatars, :string, array: true, default: []
end