Переменные связывания в Ruby

0

В настоящее время у меня есть таблица, которая указана ниже:

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 не признает это сейчас, когда я включил другую таблицу?

Теги:
binding

3 ответа

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': ВЫБРАТЬ projects . * ОТ projects теги ГДЕ ((projects.status = 2) И (projects.name LIKE '%%' ИЛИ projects.description LIKE '%%' ИЛИ tags.name ЛЮБИТЬ '%%')
  • 0
    projects = Project.find (: все,: joins => "теги",: условия => [условия + "AND (projects.name LIKE? OR projects.description LIKE? OR tags.name LIKE?)", "% # {params [: query]}% ","% # {params [: query]}% ","% # {params [: query]}% "] .flatten)
1

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

  • 0
    Нету никаких отношений. таблица тегов используется только один раз на сайте и предназначена для администраторов сайта.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню