我刚刚开始在Rails中进行开发,并试图在我的用户模式下定义一个搜索范围。使用以下范围,我可以根据用户的名字或姓氏搜索用户:
scope :_s, -> (s) {
where(
'unaccent(LOWER(email)) like unaccent(LOWER(?))
OR unaccent(LOWER(first_name)) like unaccent(LOWER(?))
OR unaccent(LOWER(last_name)) like unaccent(LOWER(?))',
"%#{s}%", "%#{s}%","%#{s}%") }我找不到我的范围去搜索全名,我想下面的内容会有效的:
scope :_s, -> (s) {
select('(first_name || " " || last_name) as \'full_name\', *')
where(
'unaccent(LOWER(email)) like unaccent(LOWER(?))
OR unaccent(LOWER(first_name)) like unaccent(LOWER(?))
OR unaccent(LOWER(last_name)) like unaccent(LOWER(?))
OR unaccent(LOWER(full_name)) like unaccent(LOWER(?))',
"%#{s}%", "%#{s}%","%#{s}%","%#{s}%") }但这又回来了
未定义的列:错误:列"full_name“不存在
我知道我的数据库认为我在数据库中寻找记录,但是我如何告诉它查看上面定义的full_name呢?
发布于 2016-06-09 12:13:29
这就是SQL别名的工作方式,where子句对select子句中定义的别名一无所知。替换
unaccent(LOWER(full_name))使用
unaccent(LOWER(first_name || \' \' || last_name))https://stackoverflow.com/questions/37725452
复制相似问题