0

我正在尝试合并两个 ActiveRecord::Relation 数组以将跨越问题和答案的搜索结果放在一起。我需要将结果采用单个 ActiveRecord::Relation 数组的形式,以便我可以进一步操作它。

这是代码:

question_results = Question.where("(body || title) LIKE ?", "%#{@search}%")
answer_results = Answer.where("body LIKE ?", "%#{@search}%").group("question_id")
questions = question_results.merge(answer_results)

当我这样做时,我收到以下错误:

SQLite3::SQLException: no such column: question_id: SELECT "questions".* FROM "questions"  WHERE ((body || title) LIKE '%cosby%') AND (body LIKE '%cosby%') GROUP BY question_id

发生这种情况是因为这两个表具有不同的列,特别是因为问题没有 question_id 列。

是否可以将这两个结果合并为一个搜索结果并仍然返回 ActiveRecord::Relations?我该怎么做?

4

2 回答 2

1

当两个表之间存在可用映射时,您可以使用连接从它们中检索字段。说 Question(:id, :body, :title) has_many Answer(:id, :body, :title),然后可以使用 join 获取所有字段:

Question
.joins(:answers)
.select('questions.id as question_id, answers.id as answer_id')
.where("questions.body ilike ? or questions.title ilike ?",keyword, keyword)
.where("answers.body ilike ? or answers.title ilike ?",keyword, keyword)
.order('question_id')

对于示例,我采摘了几个字段,但您可以包含两个模型中的任何字段。还对具有相同字段名称的表使用别名(如 question_id、answer_id)。

希望能帮助到你。

于 2013-10-09T20:47:16.703 回答
-1

关系对象可以转换为数组。这否定了之后能够对它们使用任何 ActiveRecord 方法

questions = question_results + answer_results
于 2013-10-09T04:33:28.360 回答