Этот код будет работать для изменения числовых столбцов, а затем заменить все NA
на 0.
Если вы хотите изменить все столбцы на числовые просто используйте mutate_all()
.
library(tidyverse)
df %>%
mutate_at(vars(column1), as.numeric)) %>%
replace(is.na(.), 0)
Я предполагаю, что Вы используете 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.
Так как необходимо обработать строку даты, прежде чем она будет преобразована в дату в модели, я переопределил бы средство доступа для того поля
Скажем, поле даты 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
Использование 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
Если вам нужна совместимость с Rails 3 или Ruby 1.9, попробуйте гем date_validator .