如果关联不存在,ActiveRecord MySQL 来自自身和关联的查询 "Like" 检索 null
ActiveRecord MySQL query "Like" from self and associations retrieves null if associations are non existant
我有以下范围:
scope :scope_name_or_email_search, lambda { |query = ''|
joins(:user_information)
.where('
users.email LIKE ? OR
user_informations.first_name LIKE ? OR
user_informations.last_name LIKE ?',
"%#{query}%", "%#{query}%", "%#{query}%")
}
此范围仅检索具有“user_informations”数据的用户。
如果我搜索“@”,只会检索到具有“user_informations”数据的用户,但是他们的电子邮件中都包含字符“@”。
最好的方法是什么?
解决方法很简单。我需要在查询中留下一个连接,所以 ActiveRecord 范围将变成这样:
scope :scope_name_or_email_search, lambda { |query = ''|
left_joins(:user_information)
.where('
users.email LIKE ? OR
user_informations.first_name LIKE ? OR
user_informations.last_name LIKE ?',
"%#{query}%", "%#{query}%", "%#{query}%")
}
我有以下范围:
scope :scope_name_or_email_search, lambda { |query = ''|
joins(:user_information)
.where('
users.email LIKE ? OR
user_informations.first_name LIKE ? OR
user_informations.last_name LIKE ?',
"%#{query}%", "%#{query}%", "%#{query}%")
}
此范围仅检索具有“user_informations”数据的用户。
如果我搜索“@”,只会检索到具有“user_informations”数据的用户,但是他们的电子邮件中都包含字符“@”。
最好的方法是什么?
解决方法很简单。我需要在查询中留下一个连接,所以 ActiveRecord 范围将变成这样:
scope :scope_name_or_email_search, lambda { |query = ''|
left_joins(:user_information)
.where('
users.email LIKE ? OR
user_informations.first_name LIKE ? OR
user_informations.last_name LIKE ?',
"%#{query}%", "%#{query}%", "%#{query}%")
}