[前][次][番号順一覧][スレッド一覧]

rails:3182

From: Nobuhiro IMAI <nov@y...>
Date: Fri, 04 Sep 2009 03:43:15 +0900 (JST)
Subject: [rails:3182] Re: Active Record での書き方

いまいです。

From: Koichi Shimamura <maf01541_at_nifty.ne.jp>
Date: Wed, 02 Sep 2009 17:58:46 +0900

> はじめまして、島村といいます。
> 
> テーブルからデータを取ってくる時、条件が2つあってどちらか多い方を表示す
> るという場合、Active Record で上手に表現する方法があるでしょうか。
> 
> 例えば以下のような場合です。
> 
> 「新着情報の最新の10件、または24時間以内に登録されたもの」

結局は、最新 10 件 + それ以外で 24 時間以内に登録されたものってことで
すよね。

class Article < ActiveRecord::Base
  named_scope :r10, :order => "created_at DESC", :limit => 10
  named_scope :h24, lambda{|excepts|
    {:conditions => ["created_at >= ? AND id NOT IN (?)", 24.hours.ago, excepts]}
  }

  class << self
    def recents
      r10.tap{|r| r.concat(h24(r))}
    end
  end
end

名前がアレですが、こんな感じでしょうか?この後さらに Ruby レベルで並べ
替えないと使えなさそうですが。

> べたに SQL を書けばいいんですが、Rails っぽく、Ruby っぽく書けないかと
> 思っています。

逆に SQL だとどう書くのか知りたいです :-)。
--
Nobuhiro IMAI <nov@y...>
Key fingerprint = F39E D552 545D 7C64 D690  F644 5A15 746C BD8E 7106

--
ML: rails@r...
使い方: http://QuickML.com/

[前][次][番号順一覧][スレッド一覧]

      3174 2009-09-02 10:58 [maf01541@n...       ] Active Record での書き方                
      3178 2009-09-03 11:36 ┣[ggb03124@n...       ]                                       
      3181 2009-09-03 13:32 ┃┗[ggb03124@n...       ]                                     
      3180 2009-09-03 11:58 ┣[sakuro@2...         ]                                       
      3184 2009-09-04 03:34 ┃┗[ggb03124@n...       ]                                     
      3185 2009-09-04 05:56 ┃ ┗[ofl@c...            ]                                   
      3189 2009-09-04 13:12 ┃  ┗[maf01541@n...       ]                                 
      3205 2009-09-12 01:40 ┃   ┗[maf01541@n...       ]                               
      3206 2009-09-12 02:06 ┃    ┣[nov@y...            ]                             
      3208 2009-09-12 02:46 ┃    ┃┗[maf01541@n...       ]                           
      3209 2009-09-12 03:00 ┃    ┗[ofl@c...            ]                             
->    3182 2009-09-03 20:43 ┗[nov@y...            ]                                       
      3183 2009-09-03 21:05  ┗[nov@y...            ]