Динамические поиски взрыва в 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
Другие вопросы по тегам