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

  • Ben Schoon

    Ben Schoon

    23 Kasım 2012
  • mliskIT

    mliskIT

    29 Mart 2012
  • TotalSeminarsChannel

    TotalSeminar

    16 Mart 2010