Рельсы показывают начало записи с дб с конкретными буквами - PullRequest
0 голосов
/ 30 октября 2019

Я хочу показать только те процессы запросов, где название компании начинается с определенных букв. Я подумал, что должен использовать start_with?, но в приведенном ниже коде у меня есть ошибка

NoMethodError (неопределенный метод `start_with? '

def call
  InquiryProcess.all.includes(inquiry_field_responses: :inquiry_field).select do |process|
    process.inquiry_field_responses.select do |inquiry_field_responses|
      inquiry_field_responses.inquiry_field.name == 'company_name'
    end&.last&.value == start_with?('aaa')
  end
end

Ответы [ 2 ]

3 голосов
/ 30 октября 2019

Я бы сделал что-то вроде этого:

field = InquiryField.find_by!(name: 'company_name')
response_table = InquiryFieldResponse.arel_table
responses = field.inquiry_field_responses.where(response_table[:value].matches('aaa%'))
processes = InquiryProcess.where(id: responses.select(:inquiry_process_id))

Сначала выберите поле, для которого вы хотите проверить значения. Оттуда выберите все ответы, которые принадлежат этому конкретному полю, и начните с 'aaa'. Затем выберите процессы, используя ответы.


Проблема с вашим текущим кодом заключается в том, что вы будете делать:

'some string' == start_with?('aaa')

Что должно быть:

'some string'.start_with?('aaa')

Или более конкретно для вашего случая:

end.last&.value&.start_with?('aaa')
2 голосов
/ 30 октября 2019

Это намного проще.

Просто используйте SQL для этого:

InquiryProcess.where("company_name LIKE ?",  "aaa%")

Это показывает вам все inquiry_processes, что company_name начинается с aaa

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...