私は、date_publishedを含む投稿モデルを持っています。インデックスページにリンクを表示して、特定の年のすべての投稿を表示したい(ブログには閲覧可能な月があるようなビット)年ごとのグループの問題
私が年を返すと考えることができる唯一の方法は、ポストの数々のユニークな配列を返します。しかし、これは長い道のりのようです。誰にもこれに対するよりよい解決策がありますか?たぶん、新しいテーブルを作成するほうが簡単かもしれません。年は
どのような提案ですか?
私は、date_publishedを含む投稿モデルを持っています。インデックスページにリンクを表示して、特定の年のすべての投稿を表示したい(ブログには閲覧可能な月があるようなビット)年ごとのグループの問題
私が年を返すと考えることができる唯一の方法は、ポストの数々のユニークな配列を返します。しかし、これは長い道のりのようです。誰にもこれに対するよりよい解決策がありますか?たぶん、新しいテーブルを作成するほうが簡単かもしれません。年は
どのような提案ですか?
私はこれらのいずれかを使用したい:find_by_sql
または
Post.minimum(:date_published).year..Post.maximum(:date_published).year
私はそれが今年は何の投稿がありませんかもしれない可能性を考慮していないにも関わらず、二番目に多くのことを好き!
[{"updated_at"=>"2009"}, {"updated_at"=>"2008"}, {"updated_at"=>"1979"}, {"updated_at"=>"1922"}]
years.each { |y| puts y['updated_at'] }
2009
2008
1979
1924
必要はありません
years = ActiveRecord::Base.connection.select_all("SELECT DISTINCT DATE_FORMAT(updated_at, '%Y') AS updated_at FROM posts ORDER BY updated_at DESC")
は、これは、フォーム内のすべての年の値を返します(私の例では、それはupdated_atのがある)、日付時刻フィールドのSQL検索を使用しますあなたのRubyコードでそれらのすべてを反復処理します。
>> Post.count(:all, :group => "Year(date_published)")
=> [["2005", 5], ["2006", 231], ["2007", 810], ["2009", 3]]
そしてそれからリンクを構築:あなたはcount
で:group
オプションを使用することができます。
私はあなたの第2の選択肢について多く考えました。それが最善のことであれば、まだ熟考しています。おかげで – Cameron