2013-04-24 2 views
0

У меня есть класс Ссылки. Класс имеет эти атрибутыПользовательская проверка для формата

  1. Twitter
  2. Facebook
  3. Pinterest
  4. Quora

Я хочу написать проверку, что гарантирует, когда пользователь вставляет ссылку в текстовое поле оно начинает с http или https.

Валидация работает, но у меня есть проблема, когда пользователь вообще не вставляет ссылку. Он по-прежнему пытается запустить проверку на пустой атрибут и вызывает ошибку. Следующий код - это моя попытка проверить пустой атрибут.

Вот моя проверка:

 class Links < ActiveRecord::Base 
    attr_accessible :facebook, :twitter, :quora, :pinterest 

    validate :formatted_link 

    def formatted_link 
     links = %w(facebook twitter pinterest quora) 
     if links.any? {|link| self[link].nil?} 
     #Don't want it to do any validation if column is nil. 
     #Would like to drop column if user doesn't add a link. 
     else 
      validates_format_of links, :with => URI::regexp(%w(http https)) 
      errors.add(:base, "Your link must start with http or https.") 
     end 
    end 

Причина:

Если пользователь просто представляет "www.twitter.com/username" URL прибудет-х приложил к моим сайтам URL «mydomain.com/page/ www.twitter.com/username. Не знаю, почему это происходит. Если есть что-то еще, что я мог сделать, чтобы предотвратить это или что-то я отсутствующий, пожалуйста, дайте мне знать.

Спасибо.

ответ

0

Я думаю, что вы пытаетесь сделать conditional validation окольным путем. Поскольку вы действительно просто хотите разрешить пробелы, вы можете сделать это следующим образом:

class Link < ActiveRecord::Base 
    Networks = [:facebook, :twitter, :quora, :pinterest] 
    attr_accessible *Networks 

    validates_format_of *Networks, :with => URI::regexp(%w(http https)), :allow_blank => true 
end 
+0

Спасибо, davogones, the allow_blank работал. Не могу ответить на голосование. B/c У меня недостаточно очков репутации. – Zach

1

Я думаю, вам нужно преобразовать links в символ, прежде чем передавать его на validates_format_of, но поскольку он, кажется, работает на вас, я могу ошибаться, или ваш пример кода выше может отсутствовать в этой детали.

В любом случае, вы можете пропустить проверку на бланках с:

validates_format_of :foo, with: some_format, allow_blank: true 
+0

Спасибо Джим. Пошел с добавлением: allow_blank. – Zach

 Смежные вопросы

  • Нет связанных вопросов^_^