ROR-活动记录避免n + 1个查询

时间:2018-10-11 10:09:42

标签: ruby-on-rails ruby join activerecord

我有一个与另一个模型(类别)相关的模型(新闻),所以在新闻模型中,我有:

has_and_belong_to_many :news_categories, join:table: 'news_categories_news'

我想把所有新闻都归为自己的类别,所以:

News.find(/*conditions*/).includes(:news_categories)

如果我在控制台中签到,我会看到正确的内部联接查询,但是当我调用时

@news.news_categories

(新闻是结果数组中的单个新闻)(如果新闻在结果数组中为单个新闻),如果我看到另一个查询以获取当前新闻的类别,那么如何避免这种冗余查询?

p.s:对不起,我的英语...

2 个答案:

答案 0 :(得分:0)

首先,df1 = df1.iloc[:, df1.columns.str.extract('(\d+)', expand=False).astype(int).argsort()] print (df1) column column1 column2 column3 column4 column5 column6 column7 \ 0 1 1 1 1 2 1 1 1 1 1 1 3 2 1 1 2 5 0 0 0 0 0 0 column column8 column9 column10 0 1 8 2 1 1 1 2 2 0 0 0 .includes之后链接时不起作用。原因-.find不返回关系链接所必需的find;而是返回匹配的ActiveRecord::Relation对象或错误。

您应该这样做:

News

答案 1 :(得分:0)

谢谢大家,但我以eager_load()解决了 它只生成一次查询!