カテゴリ テーブルと投稿テーブルがあります。投稿はカテゴリに属します。そのカテゴリの最新の投稿を含むすべてのカテゴリのリストを出力したいと考えています。
ちょっとばかげているように感じますが、私はこれに数時間取り組んでいます。カテゴリのクエリを試してみましjoin
たinclude
が、各カテゴリの最新の投稿のみに制限するのに問題がありました。
次に、独自のハッシュまたは配列を作成しようとしましたが、問題が発生し続けました。したがって、これ以上時間を無駄にする前に、私が想像できる次の最もクリーンな方法は次のとおりであると考えました。
これを達成する方法について私が得ることができる助けを本当に感謝します。
以下は私のコードです(最小限に抑えられています)。
デシベル/schema.rb
ActiveRecord::Schema.define(:version => yyyymmddhhmmss) do
create_table "categories", :force => true do |t|
t.string "name"
t.datetime "created_at", :null => false
t.datetime "updated_at", :null => false
end
create_table "posts", :force => true do |t|
t.string "title"
t.integer "category_id"
t.datetime "created_at", :null => false
t.datetime "updated_at", :null => false
end
end
アプリ/モデル/カテゴリ.rb
class Category < ActiveRecord::Base
...
has_many :posts
...
end
アプリ/モデル/post.rb
class Post < ActiveRecord::Base
...
belongs_to :category
...
end
アプリ/コントローラー/categories_controller.rb
class CategoriesController < ApplicationController
...
def index
@categories = Category.all
# The following loop is what my question is about
@categories.each do |c|
latest_post = Post.where(:category_id => c.id).order('published_at DESC').first
# "Inject" post.id and post.title in to the current @categories hash
end
end
...
end
アプリ/ビュー/カテゴリ/index.html.erb
<% @categories.each do |c| %>
...
<h4><a href="<%= category_path(c) %>"><%= c.name %></a></h4>
# The following line is how I envision the output to work
<p><a href="<%= post_path(c.post_id) %>"><%= c.post_title %></a></p>
...
<% end %>
raise @categories.to_yaml
前
---
- !ruby/object:Category
attributes:
id: 1
name: General
created_at: 2013-01-10 22:08:57.291758000 Z
updated_at: 2013-01-10 22:09:02.414022000 Z
...
以下は仮説です。
raise @categories.to_yaml
後
---
- !ruby/object:Category
attributes:
id: 1
name: General
created_at: 2013-01-10 22:08:57.291758000 Z
updated_at: 2013-01-10 22:09:02.414022000 Z
post_id: 80
post_title: Lorem Ipsum
...