以下面的基本論壇爲例。需要幫助瞭解ActiveRecord的工作原理
class Forum < ActiveRecord::Base
has_many :topics, :dependent => :destroy
end
class Topic < ActiveRecord::Base
belongs_to :forum
belongs_to :user
has_many :posts, :dependent => :destroy
end
class Post < ActiveRecord::Base
belongs_to :topic
belongs_to :user
end
class User < ActiveRecord::Base
has_many :posts
has_many :topics
end
現在說我想添加獲取每個論壇的「最新帖子」信息的能力。我的論壇表有一個名爲「last_post_id」的專欄,該專欄包含在論壇中發佈的最後一篇文章的ID。如果我的理解是如何活動記錄的作品,我需要一個「HAS_ONE」的關係添加到我的論壇模型,並指定主鍵我想用,像這樣:
類論壇<的ActiveRecord :: Base的 的has_many:主題,:依賴=>:摧毀 HAS_ONE:LAST_POST,:CLASS_NAME => '帖子',:primary_key =>:last_post_id 結束
然後我的查詢應該是這樣的:
@forums = Forum.all(:include => [:last_post])
這是正確的至今?但是,說我也想獲取發佈最後一篇文章的用戶信息。那麼我的帖子表中有一個我可以使用的「user_id」列。我是否需要像創建last_post一樣創建「has_one」關係?這似乎並不奏效:
class Forum < ActiveRecord::Base
has_many :topics, :dependent => :destroy
has_one :last_post , :class_name => 'Post', :primary_key => :last_post_id
has_one :last_poster, :class_name => 'User', :primary_key => :last_post_user_id
end
如何使用last_post.user_id的值從用戶表中獲取用戶信息。原始查詢將如下所示:
SELECT forums.*,
last_post.id as last_post_id,
last_post.user_id as last_post_user_id,
last_post_user.username as last_post_username,
FROM forums as forums
INNER JOIN posts as last_post ON last_post.id = forums.last_post_id
INNER JOIN users as last_post_user ON last_post.user_id = last_post_user.id
請注意,我使用last_post.user_id獲取用戶信息。你如何使用rails來做到這一點?目標是讓以下變量可用於呈現視圖中的最後發佈信息。
forum.last_post.date # the last post object
forum.last_poster.username # the user object who created the last post
我理解這是如何正確工作的,我做錯了什麼?
這是非常有益的,謝謝! – Ken