Ruby on rails 具有多个可选关联的Rails模型范围

Ruby on rails 具有多个可选关联的Rails模型范围,ruby-on-rails,ruby,Ruby On Rails,Ruby,我有一个模型部署,它有以下关系: belongs_to :user belongs_to :user_group, optional: true 我希望能够定义范围以便于筛选。我可以很容易地按用户进行筛选,如下所示: scope :by_owner, -> (ow) { joins(:user).where("users.name like ?", "%#{ow}%") } If this deployment belongs to at least one user_gro

我有一个模型部署,它有以下关系:

  belongs_to :user
  belongs_to :user_group, optional: true
我希望能够定义范围以便于筛选。我可以很容易地按用户进行筛选,如下所示:

scope :by_owner, -> (ow) {  joins(:user).where("users.name like ?", "%#{ow}%") }
If this deployment belongs to at least one user_group
  scope :by_owner, -> (ow) {  joins(:user_group).where("user_groups.name like ?", "%#{ow}%") }
else
  scope :by_owner, -> (ow) {  joins(:user).where("users.name like ?", "%#{ow}%") }
end
但如果关联存在,我真正想使用的是user\u group,如果关联不存在,则依赖于user。逻辑是这样工作的:

scope :by_owner, -> (ow) {  joins(:user).where("users.name like ?", "%#{ow}%") }
If this deployment belongs to at least one user_group
  scope :by_owner, -> (ow) {  joins(:user_group).where("user_groups.name like ?", "%#{ow}%") }
else
  scope :by_owner, -> (ow) {  joins(:user).where("users.name like ?", "%#{ow}%") }
end
我猜我必须通过SQL查询以某种方式实现它,但我似乎无法理解它。有什么建议吗? 谢谢

更新 我通过以下查询更进一步:

  scope :by_owner, -> (ow) {  joins(:user, :user_group).where("(users.display_name like ?) OR (user_groups.name like ?)", "%#{ow}%", "%#{ow}%") }

但仍然不是这样,因为在响应中忽略了所有没有用户组关联的记录中的第一个记录,并且即使定义了用户组,它也会按用户进行搜索。仍在寻找任何建议。

您可以创建一个方法来检查关联,如果关联存在,则在您的作用域中使用“user_group”,否则在您的作用域中使用“user”。@ZainNazirButt所以Rails在确定作用域时将对集合中的每个项执行该函数?太酷了,我来试试。谢谢