Note that there are some explanatory texts on larger screens.

plurals
  1. POrails custom validation not failing when it should
    text
    copied!<p>This might not be the cleanest code yet, still quite new to Ruby... </p> <p>I have the following spam check method in my message.rb model:</p> <pre><code>validate :no_spam?, :if =&gt; "sender_user_id != nil" private def no_spam? #first easy spam detection, if the (hidden by css) company field is filled, it is spam for sure if !company.blank? errors.add(:body, I18n.t(:No_spam_allowed)) return false end #Mollom advanced spam detection m = Mollom.new(:private_key =&gt; 'xxx', :public_key =&gt; 'xxx') #check content in case it is a first submit of the form if captcha_session_id.blank? content = m.check_content(:post_body =&gt; body, :author_name =&gt; sender_name, :author_mail =&gt; sender_email, :author_ip =&gt; sender_ip) else #check captcha if the form was resumbitted after an unsure result logger.debug "DEBUG: GOING TO CHECK CAPTCHA" result = m.valid_captcha?(:session_id =&gt; captcha_session_id, :solution =&gt; captcha_solution.chomp) if result logger.debug "DEBUG: TRUE -&gt; GOOD CAPTCHA" return true else logger.debug "DEBUG: FALSE -&gt; BAD CAPTCHA" return false end end #returning the right values and error messages for different content check outcomes logger.debug "DEBUG: I'M CONTINUING THE METHOD EXECUTION" if content.spam? logger.debug "DEBUG: SPAM DETECTED" errors.add(:body, I18n.t(:No_spam_allowed)) return false elsif content.unsure? logger.debug "DEBUG: MESSAGE UNSURE - FAIL FORM BUT SHOW CAPTCHA" errors.add(:captcha_solution, I18n.t(:Type_the_characters_you_see_in_the_picture_below)) self.captcha_image_url = m.image_captcha(:session_id =&gt; content.session_id)["url"] self.captcha_session_id = content.session_id return false else logger.debug "DEBUG: MESSAGE OK!" return true end end </code></pre> <p>development.log</p> <pre><code>Processing MessagesController#create (for 127.0.0.1 at 2011-08-12 12:01:24) [POST] Parameters: {"commit"=&gt;"Verzend", "action"=&gt;"create", "authenticity_token"=&gt;"xxxxxxxxxxx", "locale"=&gt;"nl", "controller"=&gt;"messages", "message"=&gt;{"sender_email"=&gt;"[FILTERED]", "company"=&gt;"", "body"=&gt;"unsure", "sender_phone"=&gt;"xxxx", "sender_name"=&gt;"Admin ImmoNatie"}} Message Columns (6.0ms) SHOW FIELDS FROM `messages` User Columns (10.0ms) SHOW FIELDS FROM `users` User Load (7.0ms) SELECT * FROM `users` WHERE (`users`.`id` = '1') AND (users.deleted_at IS NULL ) LIMIT 1 SQL (0.0ms) BEGIN User Update (0.0ms) UPDATE `users` SET `updated_at` = '2011-08-12 10:01:25', `perishable_token` = 'xxxxxxxxxxx', `last_request_at` = '2011-08-12 10:01:25' WHERE `id` = 1 SQL (3.0ms) COMMIT SQL (0.0ms) BEGIN DEBUG: I'M CONTINUING THE METHOD EXECUTION DEBUG: MESSAGE UNSURE - FAIL FORM BUT SHOW CAPTCHA SQL (0.0ms) ROLLBACK Rendering template within layouts/application Rendering messages/new Rendered messages/_form (8.0ms) Rendered layouts/_google_analytics (0.0ms) Rendered layouts/_login (3.0ms) Rendered layouts/_navigation (6.0ms) Rendered layouts/_header (12.0ms) Rendered about_us/_ten_reasons_9_body (0.0ms) NewsletterEmail Columns (5.0ms) SHOW FIELDS FROM `newsletter_emails` Rendered layouts/_footer (41.0ms) Completed in 1907ms (View: 70, DB: 40) | 200 OK [http://infinitize.dynalias.com/contact] tize.dynalias.com/contact] SQL (0.0ms) SET SQL_AUTO_IS_NULL=0 Property Columns (10.0ms) SHOW FIELDS FROM `properties` Processing MessagesController#create (for 127.0.0.1 at 2011-08-12 12:01:32) [POST] Parameters: {"commit"=&gt;"Verzend", "action"=&gt;"create", "authenticity_token"=&gt;"xxxxxxxxxxx", "locale"=&gt;"nl", "controller"=&gt;"messages", "message"=&gt;{"sender_email"=&gt;"[FILTERED]", "company"=&gt;"", "body"=&gt;"unsure", "captcha_solution"=&gt;"", "sender_phone"=&gt;"xx", "captcha_session_id"=&gt;"xxxxxxxxxxx", "sender_name"=&gt;"Admin ImmoNatie"}} Message Columns (5.0ms) SHOW FIELDS FROM `messages` User Columns (10.0ms) SHOW FIELDS FROM `users` User Load (0.0ms) SELECT * FROM `users` WHERE (`users`.`id` = '1') AND (users.deleted_at IS NULL ) LIMIT 1 SQL (0.0ms) BEGIN User Update (0.0ms) UPDATE `users` SET `updated_at` = '2011-08-12 10:01:32', `perishable_token` = 'xxxxxxxxxxx', `last_request_at` = '2011-08-12 10:01:32' WHERE `id` = 1 SQL (4.0ms) COMMIT SQL (0.0ms) BEGIN DEBUG: GOING TO CHECK CAPTCHA DEBUG: FALSE -&gt; BAD CAPTCHA Message Create (0.0ms) INSERT INTO `messages` (`sender_email`, `receiver_user_id`, `receiver_email`, `created_at`, `body`, `opened_by_owner`, `updated_at`, `receiver_name`, `opened_by_sender`, `sender_ip`, `message_thread_id`, `sender_user_id`, `sender_name`) VALUES('admin@immonatie.be', 1, 'test@immonatie.be', '2011-08-12 10:01:33', 'unsure', NULL, '2011-08-12 10:01:33', 'ImmoNatie', NULL, '127.0.0.1', NULL, 1, 'Admin ImmoNatie') MessageThread Columns (5.0ms) SHOW FIELDS FROM `message_threads` MessageThread Create (1.0ms) INSERT INTO `message_threads` (`last_message_opened_by_sender_id`, `answered`, `initial_sender_user_id`, `created_at`, `initial_sender_email`, `starred`, `updated_at`, `last_message_opened_by_owner_id`, `type_id`, `owner_id`, `property_id`, `first_message_id`, `initial_sender_name`, `initial_sender_phone`, `last_message_id`, `last_message_added_at`) VALUES(213, NULL, 1, '2011-08-12 10:01:33', 'admin@immonatie.be', 0, '2011-08-12 10:01:33', 0, 174, 1, NULL, 213, 'Admin ImmoNatie', 'xx', 213, '2011-08-12 10:01:33') Message Update (0.0ms) UPDATE `messages` SET `updated_at` = '2011-08-12 10:01:33', `message_thread_id` = 101, `sender_name` = 'Admin ImmoNatie', `created_at` = '2011-08-12 10:01:33', `sender_email` = 'admin@immonatie.be', `sender_ip` = '127.0.0.1', `sender_user_id` = 1, `receiver_name` = 'ImmoNatie', `receiver_email` = 'test@immonatie.be', `body` = 'unsure', `receiver_user_id` = 1 WHERE `id` = 213 Sent mail to test@immonatie.be Date: Fri, 12 Aug 2011 12:01:33 +0200 From: Notifications &lt;no-reply@immonatie.be&gt; To: test@immonatie.be Subject: Nieuw contact bericht Mime-Version: 1.0 Content-Type: text/html; charset=utf-8 Naam: xxxx&lt;br /&gt; E-mail: xxxx&lt;br /&gt; Telefoon: xxxx&lt;br /&gt; &lt;br /&gt; Bericht:&lt;br /&gt; unsure SQL (3.0ms) COMMIT </code></pre> <p>In the development.log you see that I first submit the form (first create action) with 'unsure' in the body to invoke an unsure result from Mollom (this site is in development mode).</p> <p>The validation fails for this first create action as expected.</p> <p>But when I resubmit the form now with an empty captcha verification code, the validation method returns false, but the validation does not, since the save is continued and COMMITTED in the end.</p> <p>Why does this validation not fail and break (rollback) the create action?</p> <p>Thanks, Michael</p>
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload