Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 如何在RubyonRails中将数据库记录追加到变量中_Ruby On Rails_Ruby_Ruby On Rails 3 - Fatal编程技术网

Ruby on rails 如何在RubyonRails中将数据库记录追加到变量中

Ruby on rails 如何在RubyonRails中将数据库记录追加到变量中,ruby-on-rails,ruby,ruby-on-rails-3,Ruby On Rails,Ruby,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 我的问题是当循环完成时,@other_task只保存最后一个记录值 是否可以将所有ids记录附加到一个变量中?您可以

我根据城市名称从数据库中获取了所有用户

这是我的代码:

@othertask = User.find(:all, :conditions => { :city => params[:city]})
@othertask.each do |o|
  @other_tasks = Micropost.where(:user_id => o.id).all 
end
我的问题是当循环完成时,
@other_task
只保存最后一个记录值


是否可以将所有ids记录附加到一个变量中?

您可以通过以下方式执行此操作

 @othertask = User.find(:all, :conditions => { :city => params[:city]})
 @other_tasks =  Array.new 
 @othertask.each do |o|
   @other_tasks << Micropost.where(:user_id => o.id).all 
 end
@othertask=User.find(:all,:conditions=>{:city=>params[:city]})
@其他_任务=Array.new
@othertask.each do|o|
@其他任务(o.id.),全部
结束

以下是更新后的代码:

@othertask = User.find_all_by_city(params[:city])
@other_tasks = Array.new  
@othertask.each do |o|
  @other_tasks << Micropost.find_all_by_user_id(o.id)
end
@othertask=User。按城市查找所有城市(参数[:城市])
@其他_任务=Array.new
@othertask.each do|o|
@其他任务尝试:

用户模型:

has_many :microposts
微观模型:

belongs_to :user
质疑


您应该为类似的内容使用连接,而不是循环并进行N个额外的查询,每个用户一个查询。现在,您的代码首先获取具有给定城市属性值的所有用户,然后对于每个用户,您再次查询数据库以获取一个microspost(
microspost.where(:user\u id=>o.id)
)。这是非常低效的

您正在搜索所有MicroPost,这些MicroPost的用户所在城市为
params[:city]
,对吗?这样就不需要首先查找所有用户,而是直接查询MicroPost表:

@posts = Micropost.joins(:user).where('users.city' => params[:city])
这将找到所有用户具有
city
属性的帖子,该属性等于
params[:city]


p、 我强烈建议您阅读更多关于如何有效使用关联的详细信息。

@othertask
上使用
map
,命名非常混乱。当用户数组既不是任务也不是单个对象时,为什么要调用它?+1同意命名选择非常混乱。为什么不
@users
@posts
@other_task
保留最后一个记录值或
@other_task
?谢谢回复。但是你没有在任何地方使用临时变量。我不明白为什么这会得到这么多的投票。这绝对是一种错误的方法。要添加-我们还需要模型中的关联才能使该查询工作。没错,我假设
microspost
模型上存在
user\u id
,这意味着定义了一个
属于
关联。这很好听。有关更多详细信息,请阅读Rails关联指南:
@posts = Micropost.joins(:user).where('users.city' => params[:city])