Вложенные объектные формы Rails с помощью Paperclip - атрибуты paperclip игнорируются reject_if - PullRequest
1 голос
/ 21 августа 2009

При отправке формы вложенного объекта я не могу заставить ее отклонить недопустимые дочерние объекты, потому что процедура reject_if не видит атрибут Paperclip.

Вот соответствующие части моих моделей и форм:

class Stage < ActiveRecord::Base
  has_and_belongs_to_many :assets, :uniq => true
  accepts_nested_attributes_for :assets, :reject_if => lambda { |attrs| attrs['asset'] }

  ...
end

class Asset < ActiveRecord::Base
  has_attached_file :asset, :path => "#{Rails.root}/public/:attachment/:id/:style/:basename.:extension",
                             :url => ":attachment/:id/:style/:basename.:extension"
  validates_attachment_presence :asset
 end

 - form_for [@campaign, @stage], :html => {:multipart => true} do |f|
 ....
   - f.fields_for :assets do |asset_form|
     - field_set_tag do
       - if asset_form.object.new_record?
         %h4 New Asset
       %p
         = asset_form.label :asset, "File"
         %br
         = asset_form.file_field :asset
       %p
         = asset_form.label :identifier
         %br
         = asset_form.text_field :identifier

Я поставил отладчик в часть reject_if:

(rdb:1) p attrs
{"identifier"=>""}

Я думал, что это потому, что он смотрит только на атрибуты, которые являются столбцами, но это не так, как я обнаружил, добавив attr_accessor в Asset

p attrs
{"misc_attr"=>"", "identifier"=>""}

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

1 Ответ

0 голосов
/ 11 сентября 2009

Я не знаю, в этом ли суть, но в классе активов не должно быть строки, которая объявляет ассоциацию с классом Stage, например:

    class Asset < ActiveRecord::Base
    has_and_belongs_to_many :stages

??

...