В настоящее время у меня есть таблица, которая указана ниже:
projects = Project.find(:all, :conditions => [conditions + "AND (name LIKE ? OR description LIKE ?)", "%#{params[:query]}%", "%#{params[:query]}%"])
где
conditions = Project.in_used_projects(:alias => "projects")
Однако мне нужно включить третью переменную, которая не из таблицы Project, а из таблицы тегов. Мне нужна колонка Tag - > Names
. В любом случае я могу привязывать переменные из другой таблицы в Ruby? Project.find(all)
автоматически передает SELECT * FROM Project
в MYSQL. Кто-то предложил использовать функцию соединения, но я не уверен, как это будет работать. Любые идеи?
РЕДАКТИРОВАТЬ 1
Я попробовал предложенный ответ на использование
projects = Project.find(:all, :joins => "tags", :conditions => [conditions + "AND (projects.name LIKE ? OR description LIKE ? OR tags.name LIKE ?", ["%#{params[:query]}%" * 3]].flatten)
но теперь я получаю еще одну ошибку
Mysql::Error: Unknown table 'projects': SELECT
Проекты .* FROM
Проекты tags WHERE ((projects.status = 2)AND (projects.name LIKE '%%' OR projects.description LIKE '%%' OR tags.name LIKE '%%')
Очень странно, что существует таблица проектов. Почему Ruby не признает это сейчас, когда я включил другую таблицу?
Оказывается, что это была просто синтаксическая ошибка
projects = Project.find(:all, :joins=>:tags, :conditions => [conditions + "AN rojects.name LIKE ? OR projects.description LIKE ? OR tags.name LIKE ?)", "%# ams[:query]}%", "%#{params[:query]}%", "%#{params[:query]}%"])
- правильный синтаксис. За: joins необходимо следовать: тегами, а не "тегами", Еще раз спасибо за помощь всем.
Попробуйте это для размера:
projects = Project.find(:all, :joins => "tags", :conditions => [conditions + "AND (projects.name LIKE ? OR description LIKE ? OR tags.name LIKE ?", ["%#{params[:query]}%" * 3]].flatten)
Опция :joins
сообщает Active Record выполнить SQL-соединение в таблице tags
, что позволит вам выполнять запросы в столбце тегов. Также обратите внимание в этом примере, как я добавил префикс projects.
в исходный столбец name
. Это значит, что ваша база данных не смущается, какой столбец name
вам нужен; один из таблицы projects
или tags
.
Есть ли у вас какие-либо отношения между проектами и тегами? Если причина вашего запроса в том, что он есть, он должен быть отражен в модели (например, с HABTM), что также позволит вам легко фильтровать на основе этих отношений без необходимости создания сложных SQL-запросов.
projects
. * ОТprojects
теги ГДЕ ((projects.status = 2) И (projects.name LIKE '%%' ИЛИ projects.description LIKE '%%' ИЛИ tags.name ЛЮБИТЬ '%%')