获取与where子句的活动记录关系的所有记录

时间:2015-09-17 18:14:48

标签: ruby-on-rails ruby-on-rails-4 rails-activerecord

用户有很多帖子帖子有许多部分

我想检查用户是否有任何帖子部分标题为" Hello World"。

在Rails 4中执行此操作的正确方法是什么?

我尝试了什么:sections = @user.sections.where(title: "Hello World")

错误:NoMethodError: undefined method 'sections' for #<User::ActiveRecord_Relation:0x007f8781fa9a19>

2 个答案:

答案 0 :(得分:1)

您可以通过这种方式实现它,使用exists?方法检查单个SQL调用是否存在任何记录(没有像any?present?那样不必要的对象实例化): / p>

@user.posts.includes(:sections).where(sections: {title: "Hello World"}).exists?

答案 1 :(得分:0)

你可以使用:join:

@user.posts.joins(:sections).where(sections: {title: "Hello World"}).any?

这里将使用INNER JOIN,这将生成sql-query:

SELECT COUNT(*) FROM "posts" 
INNER JOIN "sections" ON "sections"."post_id" = "posts"."id" 
WHERE "posts"."user_id" = $1 AND "sections"."title" = "Hello World"