.new_record? and :_destroy

Rails version 2.3.8

I have a ticket model that has many comments

the comments have an attribute called "admin" -- is this a comment added by an administrator

the ticket has an attribute called "admin_email_address"

I want to validate when saving the ticket and say "if I have a new admin comment, make sure I have an admin_email_address"

In my ticket model, the method to do the validate looks like the following and works as expected except for one thing. If the :_destroy flag on the comment was set in my comment view partial (I want to delete a comment), it seems like this iterating over the comments with new_record? somehow resets that :_destroy flag.

Am I doing something wrong here? Or, could someone give me a hint on a more simple way to do this validation.?

Thanks !!

new_admin_comments = false self.comments.each do |comment|    new_admin_comments = true if comment.new_record? && comment.admin_comment == true end

if admin_email.blank? && new_admin_comments == true    errors.add_to_base("Admin email address required.") end

jim <jimr6007@...> writes:

Rails version 2.3.8

I have a ticket model that has many comments

the comments have an attribute called "admin" -- is this a comment added by an administrator

This seems weird. Why not simply have a comment owned by a user, which may have an admin flag?

the ticket has an attribute called "admin_email_address"

Again weird. Comments don't have email addresses - administrators do.

I want to validate when saving the ticket and say "if I have a new admin comment, make sure I have an admin_email_address"

I suggest you place conditional validations on the user model to ensure administrators have an email address specified.

In my ticket model, the method to do the validate looks like the following and works as expected except for one thing. If the :_destroy flag on the comment was set in my comment view partial (I want to delete a comment), it seems like this iterating over the comments with new_record? somehow resets that :_destroy flag.

Am I doing something wrong here? Or, could someone give me a hint on a more simple way to do this validation.?

Thanks !!

new_admin_comments = false self.comments.each do |comment|    new_admin_comments = true if comment.new_record? && comment.admin_comment == true end

I am not sure how selecting ticket.comments will ever return comment.new_record? since they are already in the database.

Anyway, why not handle this in the view? If the comment is owned by an admin, then alter the display.

if admin_email.blank? && new_admin_comments == true    errors.add_to_base("Admin email address required.") end

This is not where it belongs. Try:

class User < ActiveRecord::Base   validates_presence_of :email, :if => :admin end