我将如何进行这样的查询。 我有
@model = Model.near([latitude, longitude], 6.8)
现在我想过滤另一个模型,它与上面的模型相关联。 (帮助我找到正确的方法来做到这一点)
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
我在 rails 上 3
现在是这样的(在@model = Model.near([latitude, longitude], 6.8之后)
model2s =[]
models.each do |model|
model.model2s.each do |model2|
model2.push(model2)
end
end
我想完成同样的事情,但使用的是事件记录查询
我部分找到了问题的答案。它仍然采用了我不满意的旧方法。
models.each do |model|
models-model2s = Model2.where("model_id => :modid",{:modid => model.id})
model2 += model
end
但这是一种愚蠢的方法,与 tadman 的方法混在一起让我知道 model.model2s 是一个我可以执行的命令(我忘记了),所以
models.each do |model|
model2s += model.model2s
end
这并不完全是我想要的,但我一直在使用它,直到我看到更好的东西。 (我还在想tadman的逆向做法)
我想我找到了一些东西,为什么会失败
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)
,为什么
最佳答案
如果您只是间接检索第二种类型的模型,您可能会很幸运:
@models = Model.near([ latitude, longitude ], 6.8).includes(:model2s)
这将预加载所有“model2s”。
或者您可以尝试翻转它并直接检索 Model2,但您必须能够以其他方式表达 near
条件:
@model2s = Model2.includes(:model).where('models.x' => ...)
关于ruby-on-rails - 模型的 Rails 查询部分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8010059/