我有3张桌子
class User < ActiveRecord::Base
has_many :posts
end
class Post < ActiveRecord::Base
belongs_to :user
has_many :comments
end
class Comment < ActiveRecord::Base
belongs_to :post
end
现在我想检索特定用户的所有评论。 我尝试使用像
这样的find_by_sqlComment.find_by_sql "SELECT c.* FROM comments c, posts p, users u WHERE c.post_id = p.id and p.user_id = u.id and u.id=6"
这很好用。但我想从“帖子”表中找到一些细节以及评论。
有谁知道该怎么做?
答案 0 :(得分:1)
更正了答案..
现在我已经正确地理解了这个场景,我之前回答的部分内容仍然有意义:
如此改变User
模型:
class User < ActiveRecord::Base
has_many :posts
has_many :comments, through: :posts
end
这种类型的关系将在帖子的评论之间执行联接,其中帖子的user_id
是当前用户。很简单,就像你在评论中所说的那样,&#34;用户和评论之间的联系[是] 通过发布&#34; 。
与我之前所说的相似,此场景中的Universe中心是用户对象。通过此添加,获取所有用户的评论将只是:
user.comments
如果查看日志,则SQL输出为:
SELECT `comments`.* FROM `comments` INNER JOIN `posts` ON `comments`.`post_id` = `posts`.`id` WHERE `posts`.`user_id` = 1
与原始查询类似。
现在您检索了此用户的评论,您可以像往常一样通过Post
关系访问belongs_to :post
模型数据。
最后,除非你有一些特殊的理由试图在纯SQL中做所有事情,否则这种方法更具可读性,可维护性和“#34; Rails方式”。此外,它还为您节省了大量麻烦和打字。
有关has_many ... through
的更多信息。