我有一个类,它代表一个有两个作用域的游戏(比赛):
scope :home_lineuped, ->() { includes(:home_lineup).where(home_lineup: {lineuped: true }) }
scope :away_lineuped, ->() { includes(:away_lineup).where(away_lineup: {lineuped: true }) }
我想创建一个新的范围与逻辑运算符 * 不和 * 的结果,这是可能的吗?
**编辑:**我是什么意思?
想象一下:Match.All
给我匹配ID,1,2,3,4,5 和 6;Match.home_lineuped
给我匹配ID,1,2 和 6;Match.away_lineuped
给我匹配ID 3,4 和 6;
结果:(Match.home_lineuped AND Match.away_lineuped)
是:6。
因此:Not (Match.home_lineuped AND Match.away_lineuped)
将导致与ID匹配:1,2,3,4, 和 5。
结束编辑
此致:
大卫
3条答案
按热度按时间up9lanfz1#
你的意思是
Match.home_lineuped & Match.away_lineuped
和Match.all - (Match.home_lineuped & Match.away_lineuped)
。或创建新范围
scope :home_lineuped_and_away_lineuped, ->() { includes(:home_lineup, :away_lineup).where(home_lineups: {lineuped: true }, away_lineups: {lineuped: true }) }
scope :not_home_lineuped_and_away_lineuped, ->() { includes(:home_lineup, :away_lineup).where.not(home_lineups: {lineuped: true }, away_lineups: {lineuped: true }) }
ljsrvy3e2#
根据Rails的版本,ActiveRecord确实有一个
not
方法。希望能帮上忙。8aqjt8rx3#
你可以像这样一个接一个地调用AND逻辑的作用域:
但是如果你需要作用域,你可以将两个作用域合并为:
对于相反的逻辑(NOT AND),你可以使用
not
: