SORU
28 ŞUBAT 2009, CUMARTESİ


Nasıl raylar bir tarih doğrulamak mı?

Raylar üzerinde ruby benim modelde bir tarih doğrulamak mümkün olmak istiyorum. Ancak, gün, ay ve yıl değerleri zaten benim model vardıklarında yanlış bir tarih dönüştürülür.

Eğer girersem Modeli yaptığımda benim görüşüme göre, örneğin, Şubat 2009 31.([: model] parametreler) yeni bir kumanda, 3 Mart 2009 dönüştürür. Benim modeli o zaman hangisi geçerli bir tarih olarak görüyor, ama yanlış tarih.

Benim modelde bu doğrulama yapmak istiyorum. Herhangi bir yolu yoktur, ya gidiyorum bu tamamen yanlış mı?

Sorun anlatılır post bunu buldum ama hiçbir zaman bir çözüm vardır.

CEVAP
28 ŞUBAT 2009, CUMARTESİ


date_select yardımcı etiketler oluşturmak için kullandığınız tarih için tahmin ediyorum. Bunu yapabileceğin başka bir yol seçin form Yardımcısı gün, ay, yıl alanları için kullanmaktır. Bu, (kullanılan örnek created_at Tarih Alanı) gibi

<%= 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 %>

Ve model, tarih doğrulamak için:

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

Eğer eklenti bir çözüm arıyorsan, validates_timeliness eklenti kontrol ederdim. Bu github sayfasından) gibi çalışır:

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 

Doğrulama yöntemleri kullanılabilir listesi aşağıdaki gibidir:

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.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Canal de arkyoru

    Canal de ark

    18 Ocak 2007
  • boogie2988

    boogie2988

    6 NİSAN 2006
  • TheDroidDemos

    TheDroidDemo

    15 ŞUBAT 2011