Jit*_*dra 2 ruby ruby-on-rails ruby-on-rails-3
我根据城市名称从数据库中获取了所有用户.
这是我的代码:
@othertask = User.find(:all, :conditions => { :city => params[:city]})
@othertask.each do |o|
@other_tasks = Micropost.where(:user_id => o.id).all
end
Run Code Online (Sandbox Code Playgroud)
我的问题是当循环完成时,@other_task只保留最后一个记录值.
是否可以将所有ID记录附加到一个变量中?
你应该使用这样的连接,而不是循环并进行N个额外的查询,每个用户一个.正如您现在所拥有的那样,您的代码首先获得具有给定城市属性值的所有用户,然后对于每个用户,您再次查询数据库以获得微博(Micropost.where(:user_id => o.id)).这是非常低效的.
您正在搜索具有城市用户的所有微博,对params[:city]吗?然后,无需先找到所有用户,而是直接查询微博表:
@posts = Micropost.joins(:user).where('users.city' => params[:city])
Run Code Online (Sandbox Code Playgroud)
这将找到用户具有city等于的属性的所有帖子params[:city].
ps我强烈建议您阅读有关ActiveRecord关联的Ruby on Rails指南,了解有关如何有效使用关联的更多详细信息.
| 归档时间: |
|
| 查看次数: |
496 次 |
| 最近记录: |