【问题标题】:Carrierwave upload with nested forms?带有嵌套表单的载波上传?
【发布时间】:2012-02-07 05:47:28
【问题描述】:

不确定这里发生了什么,但我认为我的嵌套表单部分导致 CarrierWave 出现问题。

当我使用上传的文件更新字段时,没有任何反应:没有错误,但也没有存储任何内容。

我的“家庭”模型与“个人”模型具有“has_many”关系。 “个人”模型有一个“图片”上传器:

class Individual < ActiveRecord::Base
    belongs_to :household
    mount_uploader :picture, PictureUploader
end

在我看来,我有:

= form_for @household, :html => {:multipart => true} do |f|

然后为个人调用一个部分:

= f.fields_for :individuals do |builder|
  = render 'individual_fields', :f => builder

= f.submit

部分只有以下内容:

= f.label :firstname, 'First'
= f.text_field :firstname, :size => 10
= f.label :lastname, 'Last'
= f.text_field :lastname, :size => 15
= f.file_field :picture

上传的图片出现在params中:

Started POST "/households/849" for 127.0.0.1 at 2011-02-15 15:45:16 -0500
  Processing by HouseholdsController#update as HTML
  Parameters: {"...6/1/2008; Active 6/6", "individuals_attributes"=>{"0"=>{"firstname"=>"Hannah", ... 
  "picture"=>#<ActionDispatch::Http::UploadedFile:0xb9fbd24 @original_filename="3.jpg",
  @content_type="image/jpeg", @headers="Content-Disposition: form-data; 
  name=\"household[individuals_attributes][1][picture]\"; filename=\"3.jpg\"\r\nContent-Type: 
  image/jpeg\r\n", @tempfile=#<File:/tmp/RackMultipart20110215-6498-ba4bp>>, "_destroy"=>"false", 
  "id"=>"4077"}}}, "commit"=>"Update Household", "id"=>"849"}

并且存放在上传路径下的tmp目录下。它只是从未保存到数据库中,也从未移动到文件系统中。

有什么想法吗?

【问题讨论】:

    标签: ruby-on-rails ruby-on-rails-3


    【解决方案1】:

    一些可能的解决方案:

    • 看起来您有,但只是为了确保 - 您是否在家庭模型上获得了accepts_nested_attributes?
    • 另外,您是否尝试过不使用局部来定位问题?
    • 您是否在 PictureUploader 模型上安装了 Rmagick 或 minimagick?

    您还需要注意 Carrierwave 和嵌套表单的已知问题,详见 Carrierwave Wiki

    解决方法是添加如下方法:

    class Image < ActiveRecord::Base
      mount_uploader :image, ImageUploader
    
      def image=(val)
        if !val.is_a?(String) && valid?
          image_will_change!
          super
        end
      end
    
    end
    class Person < ActiveRecord::Base
      has_many :images
      accepts_nested_attributes_for :images
    end
    

    【讨论】:

    • 啊,“def=image=(val)”对我有用。我看过那个条目,但不认为它适用于我,无论出于何种原因。请注意:它应该是“accepts _nested_attributes_for”。谢谢!
    猜你喜欢
    • 2012-03-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-02
    相关资源
    最近更新 更多