В Ruby on Rails 4 был метод where_values:
User.with_all_credentials(creds).where_values
[
[0] "lower(email) = 'test'"
]
В Ruby on Rails 5, когда я пытаюсь сделать то же самое, мне возвращается, что этого метода не существует. Как я могу получить такой же результат в Ruby on Rails 5?
К сожалению, нет, я пробовал это, но в моем примере он возвращает пустой хеш.
Я думаю, что where_values никогда не было публичным API, только where_values_hash был и есть. Однако реализация where_values_hash изменилась: github.com/rails/rails/blob/… - хотя не уверен, почему в вашем случае where_values_hash пусто.
в Active Record нет четкой границы между общедоступными и предположительно частными методами (которые на самом деле являются общедоступными). Это совершенно сбивает с толку.
@apneadiving граница - это документация: если это :nodoc:, то это внутренняя. Было бы неплохо, если бы у Ruby был более жесткий способ соблюдения этого правила, но, к сожалению, это не так.
@matthewd да, я сожалею, что они не делают методы приватными, было бы понятно :)
@apneadiving и что, заставить каждую вторую строчку в rails / rails использовать .send(:foo)? : / Нам действительно нужно что-то вроде bugs.ruby-lang.org/issues/12962
@matthewd Я не уверен, что мы поняли друг друга. Я имею в виду: если основная команда rails считает метод закрытым, сделайте его закрытым. Если вы возитесь с использованием send, вы точно будете знать, что делаете это на свой страх и риск. Открытие всех дверей.
@apneadiving Самому Rails все еще необходимо иметь возможность вызывать этот метод. Если у вас есть идея, как это улучшить, пожалуйста, откройте PR.
Публичные / частные методы @matthewd являются частью любого хорошо структурированного приложения и не мешают ему работать. Однажды я сделал замечание по рельсам, и ответ был настолько жестоким, что я не собираюсь вносить свой вклад





Как легко увидеть в коде Rails, теперь это where_clause.
(Потому что where сейчас живет в CLAUSE_METHODS.)
это то, что вы ищете?