Jak mogę to zrobić, aby do przesłania produktu potrzebne były co najmniej dwa rekordy opcji?Atrybuty zagnieżdżone w Railsach: wymagają co najmniej dwóch rekordów.
class Product < ActiveRecord::Base
belongs_to :user
has_many :options, :dependent => :destroy
accepts_nested_attributes_for :options, :allow_destroy => :true, :reject_if => proc { |attrs| attrs.all? { |k, v| v.blank? } }
validates_presence_of :user_id, :created_at
validates :description, :presence => true, :length => {:minimum => 0, :maximum => 500}
end
class Option < ActiveRecord::Base
belongs_to :product
validates :name, :length => {:minimum => 0, :maximum => 60}
end
Powinno być dość proste do zrobienia z walidacji niestandardowej. Coś w stylu 'self.errors.add_to_base (" Wymagane są dwie opcje "), chyba że self.options.length> = 2' – Todd
dziękuję, że zadziałało! – morcutt
Jeśli używasz 'accepts_nested_attributes_for' z' allow_destroy: true', musisz użyć 'marked_for_destruction?' Z powiązaniem children aby znaleźć dokładną długość dzieci, ponieważ może to być możliwe podczas przesyłania z formularza niektóre obiekty zostały oznaczone '_destroy: true' do zniszczenia po zapisaniu obiektu. Długość, rozmiar i liczba nie będą działać idealnie w tym przypadku. Ten link ma idealną odpowiedź. [link] (http://stackoverflow.com/a/28476834/4377172) –