Rails: проверка с аргументами - PullRequest
0 голосов
/ 29 октября 2011

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

Я хочу провести проверку, где я проверяю, является ли определенная переменная правильной датой

В основном этовот что я хочу сделать:

def validate_date(this_date)?

    begin
       Date.parse(this_date)
    rescue
      proper_date = false
    else
          proper_date = true
    end
end

и вызвать этот метод в моей модели, используя:

attr_accessor :given_date    
validate_date(given_date)

, но также в другом месте в моем файле проверки, используя, например:

attr_accessor :another_date
validate_date(another_date)

или что-то подобное ...

Что мне нужно сделать, чтобы эта работа работала?

Ответы [ 4 ]

3 голосов
/ 29 октября 2011

вы хотите добавить ошибки вместо возврата false, поэтому вместо этого вы хотите использовать:

errors.add(:date, "is invalid")
1 голос
/ 29 октября 2011

То, что вы должны сделать, похоже на ответ nkm:

validates :name,
  presence => true # or other standard validations
validate :valid_my_date_variable

def valid_my_date_variable
  if my_date_variable.present?
    errors[:my_date_variable] << "is not valid" unless valid_date(my_date_variable)
  end
end

def validate_date(this_date)?
  begin
    Date.parse(this_date)
  rescue
    proper_date = false
  else
    proper_date = true
  end
end

Или вы можете создать валидатор для вашей даты и использовать его так же, как вы используете стандартные валидаторы.

См. документацию о том, как создать собственный валидатор, если вы предпочитаете, чтобы ваши модели были чище.

1 голос
/ 29 октября 2011

Мое мнение, что вы не должны делать это в первую очередь. Проверки выполняются по атрибутам модели, а не по любым входным аргументам методов проверки. Сделайте следующее:

def validate_date

  begin
     Date.parse(this_date)
  rescue
     errors[:date_attribute] << 'is invalid date'
  end
end

В приведенном выше коде предполагается, что в вашем Model есть атрибут date_attribute. Измените соответственно.

0 голосов
/ 29 октября 2011

Предполагая, что this_date является атрибутом (column_name), который нам нужно проверить, мы можем сделать следующее,

validate :validate_date

  def validate_date
    begin
       Date.parse(this_date)
    rescue
       errors.add(:this_date, "is not valid")
    end
  end

Ссылка: http://guides.rubyonrails.org/active_record_validations_callbacks.html#using-a-symbol-with-if-and-unless

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...