Как я проверяю дату в направляющих?

Этот код будет работать для изменения числовых столбцов, а затем заменить все NA на 0.

Если вы хотите изменить все столбцы на числовые просто используйте mutate_all().

library(tidyverse)

df %>% 
  mutate_at(vars(column1), as.numeric)) %>% 
  replace(is.na(.), 0)

90
задан the Tin Man 8 May 2017 в 23:17
поделиться

5 ответов

Я предполагаю, что Вы используете date_select помощник для генерации тегов для даты. Иначе Вы могли сделать это, должен использовать помощника формы выбора в течение дня, месяца, полей года. Как это (пример я использовал, created_at поле даты):

<%= f.select :month, (1..12).to_a, selected: @user.created_at.month %>
<%= f.select :day, (1..31).to_a, selected: @user.created_at.day %>
<%= f.select :year, ((Time.now.year - 20)..Time.now.year).to_a, selected: @user.created_at.year %>

И в модели, Вы проверяете дату:

attr_accessor :month, :day, :year
validate :validate_created_at

private

def convert_created_at
  begin
    self.created_at = Date.civil(self.year.to_i, self.month.to_i, self.day.to_i)
  rescue ArgumentError
    false
  end
end

def validate_created_at
  errors.add("Created at date", "is invalid.") unless convert_created_at
end

, Если Вы ищете сменное решение, я был бы контроль плагин validates_timeliness. Это работает как это (от страницы GitHub):

class Person < ActiveRecord::Base
  validates_date :date_of_birth, on_or_before: lambda { Date.current }
  # or
  validates :date_of_birth, timeliness: { on_or_before: lambda { Date.current }, type: :date }
end 

список доступных методов проверки следующие:

validates_date     - validate value as date
validates_time     - validate value as time only i.e. '12:20pm'
validates_datetime - validate value as a full date and time
validates          - use the :timeliness key and set the type in the hash.
59
ответ дан Jack Chu 24 November 2019 в 07:07
поделиться

Так как необходимо обработать строку даты, прежде чем она будет преобразована в дату в модели, я переопределил бы средство доступа для того поля

Скажем, поле даты published_date. Добавьте это к своему объекту модели:

def published_date=(value)
    # do sanity checking here
    # then hand it back to rails to convert and store
    self.write_attribute(:published_date, value) 
end
3
ответ дан the Tin Man 24 November 2019 в 07:07
поделиться

Вы попробовали validates_date_time плагин?

-3
ответ дан yesnik 24 November 2019 в 07:07
поделиться

Использование chronic gem:

class MyModel < ActiveRecord::Base
  validate :valid_date?

  def valid_date?
    unless Chronic.parse(from_date)
      errors.add(:from_date, "is missing or invalid")
    end
  end

end
20
ответ дан 24 November 2019 в 07:07
поделиться

Если вам нужна совместимость с Rails 3 или Ruby 1.9, попробуйте гем date_validator .

18
ответ дан 24 November 2019 в 07:07
поделиться
Другие вопросы по тегам:

Похожие вопросы: