开发者

Rails Complex Form Validations?

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 a开发者_如何学运维ny 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?


What you need is something along the lines of:

validate :credits_present

private

  def credits_present
    unless credits.any?{|c| !c.marked_for_destruction? }
      errors.add_to_base "You must provide at least one credit"
    end
  end

The conditional in credits_present may be a bit messy so let me break it down just in case you don't follow. The any? method returns true if any of the items in the Enumerable 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 get true. If true, we're in good shape, we have at least one credit that won't be deleted. If, on the other hand, we get false 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.


Try using before_save in work.rb


 before_save :check_credits

private
 def check_credits
   self.credits > 0
 end

If credits are <= zero, the save won't go through.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜