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在确定作用域时将对集合中的每个项执行该函数?太酷了,我来试试。谢谢