Rails 4 carrierwave和mysql无法将nil转换为String

时间:2016-09-01 22:28:01

标签: mysql ruby-on-rails carrierwave

使用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一切正常,但这是单个文件。

1 个答案:

答案 0 :(得分:0)

你很可能在post_params中有一些无意中的空参数。发生在我们所有人身上!

在创建帖子之前尝试运行此操作: puts post_params.to_s + "%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%"puts post_params.inspect + "%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%"甚至raise post_params.to_s;它应该为您提供一些有关在发布帖子时缺少哪些值的见解。

前两个会将字符串输出到您的Web服务器控制台(%%%符号只是为了您可以在噪声中找到输出),并且加注将中断您的浏览并在浏览器中显示它。一旦您获得更多信息,我很乐意更新此答案。如果你发现除了%%%之外根本没有输出,那么你的整个post_params变量都是零或空。