Динамические поиски взрыва в Rails 4
Rails 4 избавляется от динамических искателей, поэтому
User.find_by_hash(hash)
становится
User.where(hash: hash) # .first
Ладно, ничего страшного. Но как лучше всего справляться с такими динамическими поисками, как User.find_by_hash!(hash)
так как нет where!()
метод? Rails 4 Release Notes удобно избегать этого.
Обновление: прямо сказано: "Все динамические методы, КРОМЕ для find_by_... и find_by_...! Устарели".
Либо страницы изменились с тех пор, либо я был слеп, когда читал это.
3 ответа
В нем четко сказано: "Все динамические методы, КРОМЕ для find_by_... и find_by_...! Устарели".
Я думаю, что новый синтаксис
User.find_by!(hash: hash)
По крайней мере, вот как Райанб делает это: http://railscasts.com/episodes/400-what-s-new-in-rails-4
Надеюсь, это поможет.
Что ж, если вам нужен метод, который находит все, но вызывает исключение, если отношение пустое, вы можете создать такой новый метод для своих моделей самостоятельно (или смешать с ActiveRecord::QueryMethods). Что-то вроде:
def where!(*args)
rel = where(*args)
raise RecordNotFound if rel.empty?
rel
end