Ruby on rails 我应该对这些ActiveRecord关系使用LIKE查询吗?
假设我有一个网页表单用户界面,有两组复选框。通过设置1复选框,我可以通过设置2复选框勾选我想要的驯兽师(“Jason”、“Alexandra等”),我可以勾选我想要看的动物(“老虎”、“熊”等)。一旦我提交带有这些选项的表格,我就会得到符合标准的动物园列表(为了便于讨论,假设所有的培训师都在所有的动物园工作,所有的动物都在所有的动物园工作) 我们将按“名称”运行数据库查询(例如,使用驯兽师名称和动物名称,而不是数据库ID进行搜索) 假设我们使用的是一个Postgres数据库,它有数十万行(如果不是几百万行的话)Ruby on rails 我应该对这些ActiveRecord关系使用LIKE查询吗?,ruby-on-rails,ruby,postgresql,rails-activerecord,Ruby On Rails,Ruby,Postgresql,Rails Activerecord,假设我有一个网页表单用户界面,有两组复选框。通过设置1复选框,我可以通过设置2复选框勾选我想要的驯兽师(“Jason”、“Alexandra等”),我可以勾选我想要看的动物(“老虎”、“熊”等)。一旦我提交带有这些选项的表格,我就会得到符合标准的动物园列表(为了便于讨论,假设所有的培训师都在所有的动物园工作,所有的动物都在所有的动物园工作) 我们将按“名称”运行数据库查询(例如,使用驯兽师名称和动物名称,而不是数据库ID进行搜索) 假设我们使用的是一个Postgres数据库,它有数十万行(如果不
Zoo.includes(:anies,:trainers)。其中(“anies.name=?and trainers.name=?”,animal\u names,trainer\u names)
classzoo
编辑:假设我没有访问数据库ID的权限。
如“%Jason%”
比查询精确字符串“Jason”(或查询ID)的效率要低得多,因为虽然精确比较和使用如可以对被查询的列使用索引
但是,性能并不是这里最重要的考虑因素。比如%Jason%
在一个大小合理的数据库上,在合理的负载下可能仍然足够快。如果应用程序确实需要按子字符串搜索内容(这意味着搜索可能有多个结果),这一要求不能通过简单的平等来满足
有无数更强大的文本搜索解决方案,包括Postgres内置的全文搜索和Elasticsearch等外部解决方案。如果没有具体的扩展要求,我会选择之类的,直到它开始减速,然后再投资于更复杂的东西。为什么不从e表单?很好,假设我也可以这样做。但我仍然想回答这个问题-假设我没有访问数据库id的权限。你需要什么样的像或我喜欢查询?你是在搜索“%Jason%”或“Jason%”还是只搜索“Jason”或其他什么?基本上都是-任何包含子字符串“Jason”的选项
class Zoo < ActiveRecord::Base
has_many :animals, through: zoo_animals
has_many :trainers, through: zoo_trainers
has_many :zoo_trainers
has_many :zoo_animals
end
class Animal < ActiveRecord::Base
has_many :zoos, through :zoo_animals
has_many :zoo_animals
end
class Trainer < ActiveRecord::Base
has_many :zoos, through :zoo_trainers
has_many :zoo_trainers
end
class ZooAnimal < ActiveRecord::Base
belongs_to :animal
belongs_to :zoo
end
class ZooTrainer < ActiveRecord::Base
belongs_to :zoo
belongs_to :trainer
end