SORU
13 NİSAN 2009, PAZARTESİ


Aktif Kaydı bulmak raylar (:: => ) emir

Bu ActiveRecord kullanamıyor gibiyim::Base.seçenek bulmak :bir anda birden fazla sütun için.

Örneğin, "Show" tarih ve katılan sütunlar ile model olmalı.

Aşağıdaki kodu çalıştırın:

@shows = Show.find(:all, :order => "date")

Aşağıdaki sonuçlar elde:

[#<Show id: 7, date: "2009-04-18", attending: 2>, 
 #<Show id: 1, date: "2009-04-18", attending: 78>, 
 #<Show id: 2, date: "2009-04-19", attending: 91>, 
 #<Show id: 3, date: "2009-04-20", attending: 16>,
 #<Show id: 4, date: "2009-04-21", attending: 136>]

Aşağıdaki kodu çalıştırın:

@shows = Show.find(:all, :order => "attending DESC")

[#<Show id: 4, date: "2009-04-21", attending: 136>,
 #<Show id: 2, date: "2009-04-19", attending: 91>,
 #<Show id: 1, date: "2009-04-18", attending: 78>,
 #<Show id: 3, date: "2009-04-20", attending: 16>,
 #<Show id: 7, date: "2009-04-18", attending: 2>]

Ama, eğer kaçarsam:

@shows = Show.find(:all, :order => "date, attending DESC")

YA

@shows = Show.find(:all, :order => "date, attending ASC")

YA

@shows = Show.find(:all, :order => "date ASC, attending DESC")

Tarihe göre sıralama: sadece aynı sonuçları alıyorum

 [#<Show id: 7, date: "2009-04-18", attending: 2>, 
 #<Show id: 1, date: "2009-04-18", attending: 78>, 
 #<Show id: 2, date: "2009-04-19", attending: 91>, 
 #<Show id: 3, date: "2009-04-20", attending: 16>,
 #<Show id: 4, date: "2009-04-21", attending: 136>]

Bu sonuçları almak istiyorum

[#<Show id: 1, date: "2009-04-18", attending: 78>,
#<Show id: 7, date: "2009-04-18", attending: 2>, 
 #<Show id: 2, date: "2009-04-19", attending: 91>, 
 #<Show id: 3, date: "2009-04-20", attending: 16>,
 #<Show id: 4, date: "2009-04-21", attending: 136>]

Bu sorgu günlükleri: elde ediliyor

[4;35;1mUser Load (0.6ms)[0m   [0mSELECT * FROM "users" WHERE ("users"."id" = 1) LIMIT 1[0m
[4;36;1mShow Load (3.0ms)[0m   [0;1mSELECT * FROM "shows" ORDER BY date ASC, attending DESC[0m
[4;35;1mUser Load (0.6ms)[0m   [0mSELECT * FROM "users" WHERE ("users"."id" = 1) [0m

Son olarak, burada benim model

  create_table "shows", :force => true do |t|
    t.string   "headliner"
    t.string   "openers"
    t.string   "venue"
    t.date     "date"
    t.text     "description"
    t.datetime "created_at"
    t.datetime "updated_at"
    t.decimal  "price"
    t.time     "showtime"
    t.integer  "attending",   :default => 0
    t.string   "time"
  end

Neyi kaçırıyorum? Neyi yanlış yapıyorum?

GÜNCELLEME: yardımlarınız için Teşekkürler, ama hepiniz benim kadar şaşkın görünüyor. Sorunun çözümü aslında veritabanları geçiş oldu. Mysql için varsayılan sqlite3 gelen değiştirdim.

CEVAP
14 Ocak 2012, CUMARTESİ


İki şey olabilir. İlk olarak,

Bu kod kaldırılmıştır

Model.find(:all, :order => ...)

olmalıdır:

Model.order(...).all

Artık tüm desteklenen bul :sipariş, ve diğer birçok seçenek.

İkinci,bazı Show find aramadan önce sipariş uygulayan bir default_scope olabilirdi.

İnternette araştırmaya saat sorunu açıklayan bir kaç yararlı makaleler götürdü:

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • MrDevin521

    MrDevin521

    18 Temmuz 2010
  • RogerBuckChrist

    RogerBuckChr

    9 Temmuz 2011
  • Vintendo Power

    Vintendo Pow

    2 Ocak 2007