我有一个基本的 has_many 关系,建模如下:
class Term < ActiveRecord::Base
has_many :acroynms
end
和
class Acronym < ActiveRecord::Base
belongs_to :term
end
我想写一个 arel 关系,它将根据术语的名称或首字母缩略词的名称提取术语。我的关系不正确,但我想做一些看起来像这样的事情:
terms = Term.arel_table
relation = terms[name].matches("%#{params['a']}%")
relation = relation.or(terms[:acronyms.name].matches("%#{params['a']}%"))
@results = Term.where(relation)
我想将它保留在关系中,因为我将许多其他组合条件组合到该关系中(为简洁起见,我在此省略)。
我正在使用关系,而不是仅仅在最后一行将所有内容组合在一起,需要组合的项目直到运行时才会知道,具体取决于用户输入。我的想法是使用这个模型,我将能够设置我的关系,无论它可能多么复杂,然后只需要一行来设置@results,而不管用户输入如何。
有没有办法把这一切写成关系?否则,我想我需要求助于使用 arel 的联接,但仅在用户输入需要它的情况下才加入,对吗?