У меня есть следующий метод класса поиска, который берет кучу параметров и затем строит запрос.Rails Обработка Nil в классе Метод Chaining
def self.search(agent, params)
RealPropertySale.where(id: available_ids)
.joins(:address)
.by_state(state)
.by_suburb(suburb)
.by_post_code(post_code)
.by_country(country)
.paginate(page: page)
end
def self.by_state(state)
where(addresses: {state: state})
end
def self.by_suburb(suburb)
where(addresses: {suburb: suburb})
end
def self.by_post_code(post_code)
where(addresses: {post_code: post_code})
end
def self.by_country(country)
where(addresses: {country: country})
end
Каков правильный способ обработки, если один из моих собственных методов класса, например. self.by_country(country)
возвращает nil, так что запрос продолжается с любыми параметрами/s. Я попытался вернуть себя, если один из параметров пуст, но запрос потерян, и класс возвращается, что приводит к ошибкам.
'self.by_country (country)' не должен возвращать 'nil'. Он должен возвращать экземпляр «ActiveRecord :: Relation» с пустым множеством, и вы можете больше привязывать к нему запросы. – Uzbekjon
Обратите внимание, что вам нужно только запросить цепочку запросов, имеющих соответствующие критерии. Если «страна» не указана, цепочка 'by_country (country)' будет выдавать оператор SQL без каких-либо строк, поэтому ваш запрос не сработает с другими допустимыми критериями. Вы можете выбрать, какие цепные методы вызывать в 'self.search', чтобы заставить его работать правильно. –