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 Rails活动记录查询_Ruby On Rails_Ruby_Sqlite - Fatal编程技术网

Ruby on rails Rails活动记录查询

Ruby on rails Rails活动记录查询,ruby-on-rails,ruby,sqlite,Ruby On Rails,Ruby,Sqlite,我将如何进行这样的查询。 我有 现在我想过滤另一个模型,它与上面的模型关联。 帮我找到正确的方法 model2 = Model2.where("model_id == :one_of_the_models_filtered_above", {:one_of_the_models_filtered_above => only_from_the_models_filtered_above}) model.rb是这样的 has_many :model2s model2.rb belongs_

我将如何进行这样的查询。 我有

现在我想过滤另一个模型,它与上面的模型关联。 帮我找到正确的方法

model2 = Model2.where("model_id == :one_of_the_models_filtered_above", {:one_of_the_models_filtered_above => only_from_the_models_filtered_above})
model.rb是这样的

has_many :model2s
model2.rb

belongs_to :model
现在在@model=model.near[纬度,经度]6.8之后是这样的

model2s =[]
models.each do |model|
   model.model2s.each do |model2|
      model2.push(model2)
   end
end
我想完成同样的事情,但要使用活动记录查询

我想我找到了什么,为什么失败了

Model2.where("model.distance_from([:latitude,:longitude]) < :dist", {:latitude => latitude, :longitude => longitude, :dist => 6.8})
此查询引发此错误

SQLite3::SQLException: near "(": syntax error: SELECT "tags".* FROM "tags"  WHERE (model.distance_from([43.45101666666667,-80.49773333333333]) < 6.8)
,为什么使用包含。它将只加载两个SQL查询,而不是N+1

@models = Model.near( [latitude, longitude], 6.8 ).includes( :model2s )
因此,当您执行@models.first.model2s时,关联的model2s将已加载。有关更多信息,请参阅

如果要获取属于模型集合的所有Model2的数组,可以执行以下操作:

@models.collect( &:model2s ) 
# add .flatten at the end of the chain if you want a one level deep array
# add .uniq at the end of the chain if you don't want duplicates
collect(也称为map)将在数组中收集传递给每个调用方元素的任何块的结果。这与您的代码完全相同,有关更多信息,请参阅。符号前的&before将其转换为传递给集合中每个元素的过程,因此这与写入相同

@models.collect {|model| model.model2s }

还有一件事:@mu是对的,似乎SQLite不知道您和存储过程的距离。由于我怀疑这是一个与GIS相关的问题,您可以在

上询问此特定问题,对于初始位,您可以使用IN子句吗?就像Model2.wheremodel_id in?,@models。在第二部分中,您是否尝试将数组传递给距离_?您是否可以在模型中拥有一个属性,该属性包含可以在查询中使用的值,而不是调用distance_from方法?您必须在SQLite的SQL风格中实现distance_from,或者添加一个用户定义的函数来实现它。您可以使用联接来选择在模型查询中具有匹配项的所有Model2对象
@models.collect {|model| model.model2s }