我试图通过这个问题找到最好的方法。 我有两个模型:
Letter.rb
class Letter < ApplicationRecord
has_many :trackings,dependent: :destroy
end
信函栏目: 子, 标题
Tracking.rb
class Tracking < ApplicationRecord
belongs_to :letter
end
跟踪列: 数, 日期
我在视图中有一个包含这些列的表:
漏电痕迹
Tracking_id / number / date / letter_id / sub / title
我想通过arel搜索跟踪并返回Trackings记录作为搜索结果。搜索是多个,例如基于数字的第一次搜索,然后根据标题再次搜索结果但是问题是我无法搜索关联。
我有一个解决方案。我可以将字母数据保存为Trackings中的新列,但如果我在其他地方更新字母,这些数据将不会更新,因此我可以运行作业来更新现有Trackings中的所有字母数据。我想知道有没有更好的想法来解决这个问题?或者这个解决方案就够了?
提前致谢。
答案 0 :(得分:1)
你在找这个吗?
Tracking.includes(:letter).where(number: 1234, letters: {title: 'Hello'})
或者如果您需要更多控制搜索查询:
Tracking
.joins(:letter)
.where('trackings.number like :query OR letters.title like :query', query: "%{search_term}%")
(您可以根据需要添加更多条件)
这将在数据库上进行INNER JOIN Letter
和Tracking
,并允许您在一个语句中查询两个表中的列。
这假定每个Tracking
都有一个Letter
。
像这样,数据可以保留在它所在的位置和它所属的位置。在其表格中。
答案 1 :(得分:0)
您无需将字母数据保留为Trackings表中的新列。您可以根据搜索查询加入表格并获取数据。
Tracking.joins(:letter).where("letters.sub like :search or letters.title like :search or trackings.number like :search", search: "%#{SEARCH_QUERY}%")
这将加入 letters
和trackings
表,并允许查询从两个表中获取数据。