Общая часть в рельсах ассоциаций, я должен использовать слияние? - PullRequest
0 голосов
/ 21 ноября 2018

Обновление 2

Cama::PostType.first.posts.joins(:custom_field_values)
.where("cama_custom_fields_relationships.custom_field_slug = ? AND 
cama_custom_fields_relationships.value LIKE ?","localization", 
"%Paris%").merge(Cama::PostType.first.posts.joins(:custom_field_values)
.where("cama_custom_fields_relationships.custom_field_slug = ? AND cama_custom_fields_relationships.value = ?","type-localization", "2"))

Почему это слияние не работает?

Возвращает тот же результат, когда выполняется отдельно ... Слияние должно работать как пересечениепоэтому общая часть должна быть результатом.Я не понимаю

Обновление

Я постараюсь спросить более концептуально.

У меня есть модель B, в которой есть слаг: текст, значение: текст, принадлежат: Модель A

У меня есть модель A, у которой есть имя: строка, has_many: Модель B

@posts_one = Я ищу модель B, где slug = "что-то", значение = "город"

@ posts_two = Я ищу модель B, где slug = "настроение", значение = "good"

У меня есть 2 результата, основанные на различных параметрах.Обе принадлежат: модель A

Теперь я хочу вернуть только общее belongs_to.так что если

@ posts_one вернет мне 20 результатов с model_a_ids

@ posts_two вернет мне 20 результатов с model_a_ids

Я хочу вернуть только общие model_a_ids из этих 2 запросов ипрямо сейчас, чтобы найти сообщения.Я пытаюсь сделать это одним запросом, но не знаю, возможно ли это

Оригинальное сообщение

Я использую Camaleon CMS и пытаюсь создать фильтры на основе дополнительных "настраиваемых полей».Я думаю, что для ответа на этот вопрос вам не обязательно знать эту CMS.

Я хочу найти общую часть из 2 запросов или сделать ее в одном запросе (это было бы лучше всего)

У меня есть

@posts = Cama::PostType.first.posts.includes(:custom_field_values)
@param_localization = "Paris"
@param_type_localization = "House"


@posts_one = @posts.merge(CamaleonCms::CustomFieldsRelationship.
where("cama_custom_fields_relationships.custom_field_slug = ? AND 
LOWER(cama_custom_fields_relationships.value) LIKE ?", "localization",
"%#{@param_localization}%"))

puts @posts_one.count => 2


@posts_two = @posts.merge(CamaleonCms::CustomFieldsRelationship.where(custom_field_slug:
"type-localization", value: @param_type_localization))

puts @posts_two.count => 2

Вопрос в том, как я могуобъединить это или сделать один запрос?Когда я сделал это за один where clause, он возвращает мне 0 результатов, так как мне нужно найти 2 разных отношения с настраиваемыми полями, которые имеют разные значения и слагов, но имеют отношение к сообщениям через: custom_fields_values, поэтому я должен сделать 2 запроса, я думаю (как и я).Сначала я нахожу customFieldRelationship с slug = localization, а затем с slug = type_localization, а затем мне нужно найти common part

Я пытался @result = @posts_one.merge(@posts_two), но тогда я не получил никакого результата.Я думал, что это вернет мне " общую часть " ассоциации, что означает 2 результатов

Как я могу объединить это, чтобы найти меня сообщения, которые удовлетворяют обоим запросам?

Дайте мне знать, если я объяснил свою проблему недостаточно хорошо.

1 Ответ

0 голосов
/ 21 ноября 2018

Вы захотите объединить его в SQL: (не проверено)

@posts_combined = @posts.merge(CamaleonCms::CustomFieldsRelationship.
where("(cama_custom_fields_relationships.custom_field_slug = ? 
  OR cama_custom_fields_relationships.custom_field_slug = 'type-localization') 
  AND LOWER(cama_custom_fields_relationships.value) LIKE ? ", "localization", 
  "%#{@param_localization}%"))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...