【发布时间】:2016-08-13 20:27:38
【问题描述】:
我正在尝试使用单个搜索字段来过滤Railscasts 240 之后的任何列。定义搜索功能的关键部分在 Contact 模型中。
def self.search(search)
if search
joins(:school).where(['name ILIKE ? OR email ILIKE ? OR school.name ILIKE ?', "%#{search}%", "%#{search}%", "%#{search}%"])
else
all
end
end
这在没有 join 和 school.name 的情况下有效。联系人属于学校,并且有一个 school_id 列。确切的错误是:
PG::AmbiguousColumn: ERROR: column reference "name" is ambiguous
我猜这个模棱两可的错误是因为我试图同时搜索 contact.name 和 school.name。正在寻找一个建议以允许在不添加其他搜索字段或需要用户指定搜索类型的情况下同时进行搜索。
编辑:
以下使用contact.name 处理歧义的好建议,但这会导致另一个错误:
PG::UndefinedTable: ERROR: missing FROM-clause entry for table "contact"
LINE 1: ...ON "schools"."id" = "contacts"."school_id" WHERE (contact.na...
^
: SELECT "contacts".* FROM "contacts" INNER JOIN "schools" ON "schools"."id" = "contacts"."school_id" WHERE (contact.name ILIKE '%joseph%' OR email ILIKE '%joseph%' OR school.name ILIKE '%joseph%') ORDER BY name asc LIMIT 50 OFFSET 0
我认为这是由于内部联接将整个查询移动到学校表中,但即使我删除其他两个查询并仅搜索 school.name,错误仍然存在。
【问题讨论】:
标签: ruby-on-rails ruby postgresql search join