I have a complex form for my Work model. It accepts nested attributes for Credits, Images and Videos. (it is a modified version of Eloy Duran's complex form example)
- I want to validate presence of at least one Credit
- I want to validate presence of at least one Image or one Video
When I do (in work.rb):
validates_presence_of :credits
it validates properly when I try to submit the form without any credits but it does not validate if I remove the last credit (by checking a check_box that adds "_delete" to credit's attributes). It submits the work deleting the one and only credit leaving the work without any credits.
Do you have any idea on how I can validate these properly?
Best Answer
What you need is something along the lines of:
The conditional in
credits_present
may be a bit messy so let me break it down just in case you don't follow. Theany?
method returnstrue
if any of the items in theEnumerable
respond true to the block provided. In this case, we check that the item is not going to be deleted. So, if any of the credits are not going to be deleted we gettrue
. Iftrue
, we're in good shape, we have at least one credit that won't be deleted. If, on the other hand, we getfalse
we either know there aren't any credits or that any that are present will be deleted. In this case validation fails and we add the error.