update_attributes() не работает для вложенных атрибутов и скрепки?

Моя модель описывает абзацы и изображения, где каждый абзац имеет несколько изображений. Для обработки изображений я использую скрепку. Для массового назначения я использую изображения как nested_attributes абзаца. Соответствующий код:

модель /paragraph.rb

class Paragraph < ActiveRecord::Base
  has_many :images, :dependent => :destroy
  attr_accessible :text, :images_attributes, :images
  attr_accessor :text
  accepts_nested_attributes_for :images, :allow_destroy => true, :reject_if => proc { |attributes| attributes['photo'].blank? }
end

модель / image.rb

class Image < ActiveRecord::Base
  belongs_to :paragraph
  has_attached_file :photo, :styles => { :original => '250*250>' }
  attr_accessible :caption, :photo
  attr_accessor :caption
end

para.text и image.caption являются временными атрибутами (нет в базе данных). Если я обновляю абзац в контроллере или консоли rails (при условии, что изображение с id=1 действительно принадлежит первому абзацу), следующее обновляет файл para.text, как и ожидалось, но не обновляет image.caption вообще:

Paragraph.first.update_attributes({"text" => "foo", "images_attributes"=>{"0"=>{"caption"=>"bar", "id"=>"1"}}})

Но в подобных настройках (вложенные временные атрибуты) без использования скрепки, он работает как положено, например, для страниц, где страница имеет абзацы:

Page.first.update_attributes({"paragraphs_attributes"=>{"0"=>{"text"=>"test", "id"=>"1"}}})

Это обновляет значения страницы и вложенных абзацев с их временным текстовым атрибутом, как и ожидалось, что заставляет меня догадываться, что это может быть проблема с скрепкой...

Любая помощь приветствуется! Спасибо!!!

1 ответ

Дано images_attributes из

{"0"=>{"caption"=>"bar", "id"=>"1"}}

Я считаю, что отсутствие photo ключ вызывает его отклонение Paragraph из-за reject_if вариант accepts_nested_attributes_for вызов. attributes['photo'] будет nil когда не предусмотрено и nil.blank? является trueпоэтому он отклонен.

Другие вопросы по тегам