У меня есть функция поиска в моем приложении, где я ищу компанию, и результаты - это компании, соответствующие названию и связанным с ними первичным категориям для всех этих компаний.Использование Ransack в рельсах для поиска компаний и связанных с ними категорий
Я использую ransack для захвата соответствующих компаний.
Компании и первичные категории имеют ассоциацию has_many_and_belongs_to_many. Я рефакторинг кода, чтобы захватить соответствующие первичные категории из возвращенных компаний.
Ниже приведен метод перед внесением изменений.
def search
@q = Company.ransack(name_cont: params[:q][:name], keywords_name_cont: params[:q][:name], m: 'or')
@companies = @q.result.uniq
@q2 = PrimaryCategory.ransack(name_cont: params[:q][:name])
@categories = @q2.result.uniq
@search_term = params[:q][:name]
end
На странице результатов поиска, то я могу получить компанию, но основные категории пустые, так как я возвращается пустой объект массива.
Я ищу чистый способ извлечения связанного primary_categories из возвращенных компаний
Я переписан вышеописанный способ, чтобы включить объект массива.
def search
@q = Company.ransack(name_cont: params[:q][:name], keywords_name_cont: params[:q][:name], m: 'or')
@companies = @q.result.uniq
@categories = []
@search_categories = @companies.each {|co| @categories << co.primary_categories}
@categories.flatten!.uniq
@search_term = params[:q][:name]
end
Это работает, но я хочу знать, могу ли я получить тот же результат, используя ransack. Есть ли более эффективный способ захвата связанных объектов с помощью ransack вместо создания отдельного массива категорий?
Непонятно, что вы пытаетесь получить здесь. вы пытаетесь загрузить два типа моделей в одном и том же действии поиска или пытаетесь выполнить поиск по имени или категории? –