如何将以下ActiveRecord查询重构为SQL查询

时间:2019-02-06 10:03:57

标签: ruby-on-rails activerecord

如何在ActiveRecord查询下面将其重构为SQL查询?

where(home_team: Team.search(params, %i[name])).
  or(where(guest_team: Team.search(params, %i[name])))`

2 个答案:

答案 0 :(得分:1)

您可以使用以下内容,

value = Team.search(params, %i[name])
Klass.where('home_team = ? OR guest_team = ?', value, value)

答案 1 :(得分:0)

您可以考虑使用Arel。

where(
  %i[home_team guest_team]
    .map { |field| <YourClassModel>.arel_table[field]].in(Team.search(params, %i[name])) }
    .inject(:or)

<YourClassModel>.arel_table如果您想提出我的建议,应将这些内容移至其他功能。

另一种方法是使用Merge并尝试将Team.search打破到模型范围,并将其与您的where查询合并。