如何将数据库记录附加到rails上的ruby中的变量中

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记录附加到一个变量中?

Chr*_*erg 6

你应该使用这样的连接,而不是循环并进行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指南,了解有关如何有效使用关联的更多详细信息.