新手问题 includes 的小问题求教

williamherry · 2013年02月01日 · 最后由 williamherry 回复于 2013年02月01日 · 2166 次阅读

有三个类,HotActivity, Activity 和 ActivityType

HotActivity 和 Activity 是一对一的关系,Activity belongs to ActivityType

现在我的 controller 里这样写

@hot_activities = HotActivity.includes(:activity)

chrome 就会提示

user: william
N+1 Query detected
  Activity => [:activity_type]
  Add to your finder: :include => [:activity_type]
N+1 Query method call stack

如果我这样加上后

@hot_activities = HotActivity.includes(:activity => :activity_type)

它又提示

user: william
Unused Eager Loading detected
  HotActivity => [:activity]
  Remove from your finder: :include => [:activity] activities:575
Uniform Notifier activities:587
user: william
Unused Eager Loading detected
  Activity => [:activity_type]
  Remove from your finder: :include => [:activity_type] 

真是搞不懂了,肯定那里有根本性的错误,希望大神指出来,先谢谢了

includes 是什么,好像没怎么见过

@chenge 不会吧,难道这是旧版里的东西?

我没见过这种写法。

@hot_activities = HotActivity.includes(:activity => :activity_type)

我在文档上看到的一般是这样

HotActivity.includes(:activity, :activity_type)

或者

HotActivity.find(:all, :include => [:activity, :activity_type])

http://guides.ruby-china.org/active_record_querying.html#12

http://guides.ruby-china.org/active_record_querying.html#13

@metal 你说的方法在这里会报错的

Association named 'activity_type' was not found; perhaps you misspelled it?

因为 HotActivity 和 ActivityType 没有关系

我的写法是从 stackoverflow 网站找到了,这里也有http://apidock.com/rails/ActiveRecord/QueryMethods/includes

#4 楼 @williamherry 看起来你的查询比我的高级一些。你说的这种方式我都没用过。你去http://guides.ruby-china.org/active_record_querying.html#13 看这一节,讲复杂查询的。最主要是你到底要做什么,我不明白,取出 HotActivity 里的数据?还是 Activity 数据?

@metal 是我自己搞的太复杂了,HotActivity 实际上就是 Hot 的 Activity,我当初也想在 Activity 里加一个字段 is_hot,老大让用 has_one 的方式,现在 HotActivity 里只存个自己的 id 和 activity_id, 所以我是要取 HotActivity 的,然后在 view 里会用@hot_activity.activity, 好乱呀,我自己看看吧,感谢你的回复

需要 登录 后方可回复, 如果你还没有账号请 注册新账号