2010-11-30 2 views
0

я в настоящее время есть таблица, в которой перечисляются в следующем порядке:переплета Переменные в Ruby,

projects = Project.find(:all, :conditions => [conditions + "AND (name LIKE ? OR description LIKE ?)", "%#{params[:query]}%", "%#{params[:query]}%"]) 

где

conditions = Project.in_used_projects(:alias => "projects") 

Однако мне нужно включить 3-ю переменную, которая не из таблицы проекта, но из таблицу тегов. Мне нужна колонка Tag - > Names. В любом случае я могу привязывать переменные из другой таблицы в Ruby? Project.find(all) автоматически передает SELECT * FROM Project в MYSQL. Кто-то предложил использовать функцию соединения, но я не уверен, как это будет работать. Есть идеи?

EDIT 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 '%%')

Очень странно, учитывая таблица проектов exi с. Почему Ruby не признает это сейчас, когда я включил другую таблицу?

ответ

0

Оказывается, что это всего лишь простая ошибка

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 должен следовать: теги, а не «теги» Еще раз спасибо за помощь каждого

2

Попробуйте это для размера:

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.

+0

Mysql :: Ошибка: Неизвестные таблицы 'projects': SELECT `projects`. * FROM` projects` tags WHERE ((projects.status = 2) AND (projects.name LIKE '%%' OR projects.description LIKE '%%' ИЛИ ​​tags.name LIKE '%%') – TheRealVayne 2010-12-01 08:52:21

+0

projects = Project.find (: all,: joins => " теги ",: условия => [условия +" И (project.name LIKE? OR projects.description LIKE? ИЛИ tags.name LIKE?) ","% # {params [: query]}% ","% # { params [: query]}% ","% # {params [: query]}% "] .flatten) – TheRealVayne 2010-12-01 08:53:18

1

Есть ли у вас какие-либо отношения между проектами и тегами? Если причина вашего запроса в том, что он есть, он должен быть отражен в модели (например, с HABTM), что также позволит вам легко фильтровать на основе этих отношений без необходимости создания сложных SQL-запросов.

Смежные вопросы