Загрузка Carrierwave с вложенными формами? - PullRequest
8 голосов
/ 16 февраля 2011

Не уверен, что здесь происходит, но я думаю, что мои частичные вложенные формы вызывают проблемы для 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

Загруженное изображение появляется в параметрах:

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 под путем загрузки.Он просто никогда не сохраняется в базе данных и не перемещается в файловую систему.

Есть идеи?

1 Ответ

7 голосов
/ 16 февраля 2011

Некоторые возможные решения:

  • Похоже, у вас есть, но только для того, чтобы убедиться - у вас есть accepts_nested_attributes для модели домашнего хозяйства?
  • Кроме того, пробовали ли вы это безчастичное для локализации проблемы?
  • Есть ли у вас Rmagick или minimagick на модели PictureUploader?

А также вы захотите отметить известную проблему с 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...