Custom pre-validation

Hi. I'm trying to do a pre-validation in a form. What I need is to do
some validations, then, depending on this validation, ask a couple of
questions to the user and to process the form, including the user's
answers.

For instance

Name: John
Last name: Doe
Country: Mars

I need to validate the existence of the country but just to give a
warning to the user. Something like

"The country is not on our database. Some features won't be available
for you. Do you want to proceed?"
And a yes/no checkbox.

I did a custom validation in the controller and it works but, since I'm
not using the ActiveRecord validation way, the values of the form are
not retained.

Is there an ActiveRecord/Rails/Elegant way of doing this?

Thanks

I did a custom validation in the controller and it works but, since I'm
not using the ActiveRecord validation way, the values of the form are
not retained.

why don't you use the custom validation?
in your view you could check with myrecord.errors.on(:country) if
there's an error on country and show the checkbox if necessary

Is there an ActiveRecord/Rails/Elegant way of doing this?

yes. use the normal way
if that's not possible, you can keep the form values by generating
a new record (without saving) and filling a form (maybe invisible)
with the values, so they're handed back again later

Thorsten Mueller wrote:

in your view you could check with myrecord.errors.on(:country) if
there's an error on country and show the checkbox if necessary

Maybe I'm wrong, but I think if I do it that way (using
myrecord.errors), the validation would prevent me from saving the
record. Usually that's the expected behaviour but in my case I want the
validation just for a warning.

Thanks for your answer.

Greetings.

Most of the validates_* methods accept an :if parameter where you can
place your conditional logic.

Most of the validates_* methods accept an :if parameter where you can
place your conditional logic.

They do, but how can I include a checkbox as a validation's response.
Currently, I'm doing

def validate

  if self.country.not_exist?
    errors.add("Country does not exist. Do you want to proceed?" +
    "OK<input id='contact_proceed' name='contact[proceed]'
type='checkbox'" +
    "value='1' /><input name='contact[proceed]' type='hidden' value='0'
/>"
  end
end

Actually, it's working but I don't like at all this implementation so
I'm still hoping a better solution.

Thanks.

You have get your checkbox's value into the model. I do this by
merging the object into the params:

params[:foo].merge( :foo => foo )

Then inside the model add an :if to the validation, something like this:

:if => Proc.new { |model| model.foo.checkbox_fieldname == 1 }