ruby-on-rails - 模型的 Rails 查询部分

标签 ruby-on-rails ruby activerecord model

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

@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/

相关文章:

ruby-on-rails - Ancestry Gem 是否适用于 Rails 4?

ruby-on-rails - Fixnum 和 Numeric 有什么区别

sql - 如何构成匹配多个ORDER BY项的WHERE条件?

html - Rails 4 - 由于关联,渲染 View 很慢

mysql - 如何告诉 Selenium 使用测试数据库?

ruby - 我自己版本的 `merge` 哈希方法

ruby-on-rails - 带有自定义 header 的 Ruby 中的 HTTP.post_form

ruby-on-rails - Rails schema.rb 因不同的数据库而不同

sql - 查找字段值全部为 LOWERCASE 的记录

ruby-on-rails - 如何从 Rails SQL 日志中过滤特定字段?