2015-05-13 21 views
6

Elixir'de ecto kullanarak bir sorgu oluşturduğumda, 'nerede' cümleciğindeki zamanın nasıl karşılaştırılacağından emin değilim. Buelixir, ecto, nerede olduğunubenin zamanını karşılaştır

where: t.created_at <= %Ecto.DateTime{{2015, 4, 27}, {10, 8, 42, 0}},

parçası yanlıştan gibi görünüyor

def sample_query do 
    query = from t in Tenant, 
    where: t.id == 123, 
    where: t.created_at == %Ecto.DateTime{{2015, 4, 27}, {10, 8, 42}}, 
    select: t 
end 

gibi şema bölümünde

sorgu parçasıdır create_at :datetime

schema "tenant" do 
    field :id, :integer 
    field :created_at, :datetime 
    # timestamps([{:inserted_at,:created_at}]) 

end 

olarak ve beyan form. Birisi bana nasıl doğru şekilde yapılacağını söyler mi lütfen?

PS: alanına create_at tanımlanması hakkında, Aşağıdaki bağlantı bana Öyle bir erlang tarih/zaman başlığın bir %Ecto.DateTime{} yapı oluşturmak edemez cevabı

Default datetime with Ecto & Elixir

cevap

7

verdi. Yapmanız gereken:

def sample_query do 
    query = from t in Tenant, 
    where: t.id == 123, 
    where: t.created_at == ^Ecto.DateTime.from_erl({{2015, 4, 27}, {10, 8, 42, 0}}), 
    select: t 
end 

zaman değerleri başka bir yerden geliyorsanız ve %Ecto.DateTime{} Yapabileceğin kendini yapısına bir oluşturmak istiyorum:

^%Ecto.DateTime{year: 2015, month: 4, day: 27, hour: 10, min: 8, sec: 42, usec: 0} 

+0

(^ Not) Bu çalıştı !!! ama "created_at" gibi "create_at" gibi 'timestamps ([{: inserted_at,: created_at}])' 'yerine' create_at: 'datetime' ' –

+0

'u tanımlamam gerekiyor. Hala "yazmak için döküm olamaz: sorguda datetime" olsun ^ kullanıyorum^ve erl tarihini Ecto.DateTime. Ecto.DateTime.from_erl (: calendar.universal_time()) –

+0

@JB: Takvimin bazı geçerli tarih tuple'ı ile değiştirirseniz işe yarar mı? öyleyse takvimi değerlendirmeniz ve başka bir değişkendeki tür dönüşümü yapabilmeniz gerekebilir. –