Запрос, основанный на ассоциации HABTM - PullRequest
0 голосов
/ 21 сентября 2011

Я пытаюсь собрать запрос в ActiveRecord, который частично основан на ассоциации HABTM между project и item.Вот что я пытаюсь сделать:

@project = Project.find(params[:id])
@company = Company.find(params[:cid])
@items = @company.items.where("items.public" => true OR "items.project_ids" => @project.id )

Здесь я получаю всевозможные ошибки - сначала с OR, затем с items.project_ids, не распознаваемым и т. Д. Как можноЯ правильно пишу этот запрос?

1 Ответ

1 голос
/ 21 сентября 2011

Прежде всего, если вы собираетесь использовать ИЛИ, тогда вам нужно будет использовать строку, а не хеш-синтаксис.Во-вторых, project_ids - это динамическое поле, добавляемое Rails - чтобы сделать то же самое на уровне базы данных, вам нужно будет включить таблицу соединений и использовать ее.

Однако таблица соединений не является признанной ассоциацией в Rails, поэтому я думаю, что вам придется указать соединение вручную.

Примерно так должно работать:

@company.items.joins("left join items_projects on items_projects.item_id = items.id").where("items.public = true OR items_projects.project_id = ?", @project.id)

при условии, что вы используете стандартное имя таблицы HABTM для Rails

...