好奇哪些是更好的表现。如果您的用户拥有多个PlanDates,并且您知道您的用户是变量current_user
中ID为60的用户,那么最好是这样做:
plan_dates = current_user.plan_dates.select { |pd| pd.attribute == test }
OR
plan_dates = PlanDate.joins(:user).where("plan_dates.attribute" => test).where("users.id" => 60)
问,因为我一直在阅读使用select
的危险,因为它构建了整个对象......
答案 0 :(得分:4)
,因为与ActiveRelation方法
select
,where
等不同,它是来自Enumerable的Ruby方法,意味着整个 {在选择开始之前,必须将{1}}关系加载到内存中。这可能不会在小规模上产生影响,但如果普通用户有3,000个计划日期,那么你就麻烦了!
所以,你的第二个选项,只使用一个SQL查询来获得结果,是更好的选择。但是,您也可以这样写:
joins
这仍然只是一个SQL查询,但利用ActiveRelation的强大功能获得更具表现力的结果。
答案 1 :(得分:1)
第二个。 select必须比较代码级别的对象,第二个只是一个查询。
此外,除非您使用变量,否则第二个表达式可能无法实际执行,而第一个表达式将始终执行。