Yanıtlar:
Note.
where(:user_id => current_user.id, :notetype => p[:note_type]).
where("date > ?", p[:date]).
order('date ASC, created_at ASC')
veya her şeyi SQL gösterimine de dönüştürebilirsiniz
Note.
where("user_id = ? AND notetype = ? AND date > ?", current_user.id, p[:note_type], p[:date]).
order('date ASC, created_at ASC')
where()
. Kullanmak where()
otomatik olarak girdiden kaçar.
where()
değişkenler yerine soru işaretleriyle yukarıda gösterilen biçimde kullanıldığında girdiden otomatik olarak kaçar ve bunlar daha sonra işlev çağrısında listelenir. Bunu bu şekilde kullanmak güvenli DEĞİLDİR:Note.where("date > #{p[:date]}")
where("user_id = ?",current_user.id)
daha riskli olduğunu belirtmek where(user_id: current_user.id)
gerekir user_id
. Eğer örneğin masa açıklamalar kendiniz eklemeniz gerekir ham SQL notasyonu araçlarını kullanma: where("notes.user_id = ?",current_user.id)
.
Sütun adlarının belirsiz olduğu problemlerle karşılaşırsanız, şunları yapabilirsiniz:
date_field = Note.arel_table[:date]
Note.where(user_id: current_user.id, notetype: p[:note_type]).
where(date_field.gt(p[:date])).
order(date_field.asc(), Note.arel_table[:created_at].asc())
Kullanmayı deneyebilirsiniz:
where(date: p[:date]..Float::INFINITY)
sql cinsinden eşdeğer
WHERE (`date` >= p[:date])
Sonuç:
Note.where(user_id: current_user.id, notetype: p[:note_type], date: p[:date]..Float::INFINITY).order(:fecha, :created_at)
Ve ben de değiştim
order('date ASC, created_at ASC')
İçin
order(:fecha, :created_at)
Rails 6.1 , aşağıdaki where
koşullarda karşılaştırma operatörleri için yeni bir 'sözdizimi' ekledi , örneğin:
Post.where('id >': 9)
Post.where('id >=': 9)
Post.where('id <': 3)
Post.where('id <=': 3)
Böylece sorgunuz aşağıdaki gibi yeniden yazılabilir:
Note
.where(user_id: current_user.id, notetype: p[:note_type], 'date >', p[:date])
.order(date: :asc, created_at: :asc)
İşte daha fazla örnek bulabileceğiniz PR bağlantısı .