使用carriervawe上传图片时遇到了很大问题。我想将我的数据存储在数组中的images列中。 让我们从开始开始吧。我想为帖子上传多张图片,所以我创建了迁移:
class AddImagesToPost < ActiveRecord::Migration
def change
add_column :posts, :images, :text, array: true
end
end
我还有我的帖子图片上传器:
class PostImagesUploader < CarrierWave::Uploader::Base
include CarrierWave::RMagick
def root
Rails.root.join 'public/'
end
def store_dir
"uploads/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}"
end
def extensions_white_list
%w(jpg jpeg png)
end
storage :file
在我的Post模型中我有
mount_uploader :images, PostImagesUploader
在我看来,我有:
<%= form_for :post, html: { multipart: true } , url: create_post_path do |p| %>
<%= p.file_field :images,multiple: true %>
最终在我的控制器中我有:
def post_params
params.require(:post).permit(:description,images: []) # { images: [] } also doesnt work
end
当我想创建我的帖子(@ post = Post.new(post_params))时,我收到此错误: 无法将nil转换为字符串
请帮忙 的 EDITED 更重要的是,如果我从视图中的field_text和控制器中删除多个,我将params从{images:[]}更改为:images一切正常,但这是单个文件。
答案 0 :(得分:0)
你很可能在post_params
中有一些无意中的空参数。发生在我们所有人身上!
在创建帖子之前尝试运行此操作:
puts post_params.to_s + "%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%"
或puts post_params.inspect + "%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%"
甚至raise post_params.to_s
;它应该为您提供一些有关在发布帖子时缺少哪些值的见解。
前两个会将字符串输出到您的Web服务器控制台(%%%
符号只是为了您可以在噪声中找到输出),并且加注将中断您的浏览并在浏览器中显示它。一旦您获得更多信息,我很乐意更新此答案。如果你发现除了%%%
之外根本没有输出,那么你的整个post_params变量都是零或空。