У меня есть course
и category
модели в моем проекте. Course
имеет много categories
и category
имеет много courses
.Как использовать OR в Rails 4 ActiveRecord с именем scope
В модели course
у меня есть область :search_by_category
, которая примет название категории и найдет курс, в котором название категории курса равно имени.
scope :search_by_category, -> (name){
joins(:categories).where('categories.name = ?', name) if name.present?
}
Сфера деятельности прекрасна, если у меня есть одно имя. Но когда у меня есть массив имен, он ломается, потому что where('categories.name = ?', "Some name", "Some other name", "Some more name")
является недопустимым синтаксисом SQL.
После того, как я экспериментировал с консолью рельсов, я обнаружил, что мне нужно использовать ИЛИ.
например.
where('categories.name = name[0] OR categories.name = name[1])
Как я могу переписать свой масштаб для достижения этого или есть ли другие способы, которые я могу попробовать?
Спасибо. Это сработало. Кроме того, для тех, кто в аналогичной ситуации, мне пришлось добавить цепочку в контроллер, '.includes (: categories)', чтобы избежать двойного подсчета. –
вы должны использовать ['.references (: categories)'] (http://apidock.com/rails/ActiveRecord/QueryMethods/includes) с '.includes (: categories)' in 'Rails> = 4' –