如何在Ruby On Rails中没有关联的情况下更新一个表的数据

时间:2017-08-28 11:55:23

标签: ruby-on-rails ruby activerecord associations

我试图通过这个问题找到最好的方法。 我有两个模型:

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中的所有字母数据。我想知道有没有更好的想法来解决这个问题?或者这个解决方案就够了?

提前致谢。

2 个答案:

答案 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 LetterTracking,并允许您在一个语句中查询两个表中的列。 这假定每个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}%")

这将加入 letterstrackings表,并允许查询从两个表中获取数据。