Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 使用带有Mongoid和Carrierwave的Rails3以嵌套形式上载文件时出现问题_Ruby On Rails_Mongodb_File Upload_Nested Forms_Mongoid - Fatal编程技术网

Ruby on rails 使用带有Mongoid和Carrierwave的Rails3以嵌套形式上载文件时出现问题

Ruby on rails 使用带有Mongoid和Carrierwave的Rails3以嵌套形式上载文件时出现问题,ruby-on-rails,mongodb,file-upload,nested-forms,mongoid,Ruby On Rails,Mongodb,File Upload,Nested Forms,Mongoid,我在将SQLlite Rails 3应用程序传输到Mongoid Rails 3应用程序时遇到问题。在SQLlite版本中,我可以轻松地将一个模型(“图像”)的图像上传表单(使用回形针)包含在另一个模型(“产品”)的嵌套表单中。这是我的“新”产品表单: <%= form_for @product, :html => {:multipart => true} do |f| %> <% f.fields_for :images do |image_form

我在将SQLlite Rails 3应用程序传输到Mongoid Rails 3应用程序时遇到问题。在SQLlite版本中,我可以轻松地将一个模型(“图像”)的图像上传表单(使用回形针)包含在另一个模型(“产品”)的嵌套表单中。这是我的“新”产品表单:

  <%= form_for @product, :html => {:multipart => true} do |f| %>
     <% f.fields_for :images do |image_form| %>
       <%= f.label :productphoto %>
       <%= f.file_field :productphoto %><br />
    <% end %>
 <% end %>
{:multipart=>true}do | f |%>

以下是“展示”视图:

    <% @product.images.each do |image| %>
      <%= image_tag image.productphoto.url(:gallerythumb) %><br />
    <% end %>


当我尝试在我的Mongoid Rails 3应用程序(使用Carrierwave)中使用相同的产品视图时,出现以下错误:

    TypeError in Stores#show: 
    can't convert nil into String
    <%= image_tag product.image.url(:gallerythumb) %>
TypeError在存储中#显示:
无法将nil转换为字符串
我非常确定我在Mongoid版本中的模型是正确的,因为如果我在我的“图像”模型中添加一个字符串(比如“名称”),并将其嵌套在“产品”表单中,它就会工作。此外,我还可以将图像上传到非嵌套模型表单中


任何帮助都将不胜感激

我自己也有类似的问题。我认为问题不在于图像上传,而是Rails无法识别:图像是一个数组。如果查看帮助器的字段\u的Rails源,您会看到它检查方法“\u attributes=”。如果没有,表单将作为普通字段而不是数组发布(参数将是“images”而不是“images[0]”)

您必须向模型中添加以下行:

accepts_nested_attributes_for :images

它是carrierwave或mongoid bug


这很可能是Lewy链接到的问题——这个问题特定于这样一种安排,即您的Carrierwave上传程序安装在嵌入关联的子文档上,并且您正在保存父文档,尽管您没有明确说明您的数据是如何建模的,我怀疑是这样的,因为您注意到它与非嵌套表单一起工作(可能是保存子文档,而不是父文档)

如果你仔细研究与该问题相关的讨论,你会发现一些建议的解决办法。以下是我在这种情况下让Carrierwave工作的结果:


完全归功于zerobearing2,我对它的要点进行了修改,使其在Rails 3.0.3中工作,并在相关讨论中对我的要点进行了评论。

+1这是我使用ActiveRecord的经验。查看开发日志,您可能会看到“无法批量分配值”