Я бы предложил заменить prepend_before_filter
, который устарел, на prepend_before_action
и использовать скобки
prepend_before_action(only: [:create, :destroy]) { request.env["devise.skip_timeout"] = true }
или использовать блочный синтаксис do ... end
prepend_before_action only: [:create, :destroy] do
request.env["devise.skip_timeout"] = true
end
Большой набор параметров как это часто является (но не всегда) индикатором, что Вы могли использовать объект представить набор параметра. Это особенно верно если также:
существует несколько методов с подобными большими наборами параметра, которые могут быть заменены отдельным методом, берущим объект параметра.
метод называют create...
, Таким образом, Ваш выше кода мог стать (простите мой C++, я - Java-разработчик):
class BuildVehicleBooking {
Long officeId;
Long start;
Long end;
String origin;
String destination;
String purpose;
String requirements;
Integer numberOfPassengers;
Booking createVehicleBooking () throws ServiceException { ... }
}
Это разработчик Pattern . Преимущество этого шаблона состоит в том, что можно создать сложный набор параметров в частях, включая несколько вариаций на то, как параметры касаются друг друга и даже перезаписи параметров, поскольку новая информация становится доступной, прежде наконец звонить create
метод в конце.
Другое потенциальное преимущество состоит в том, что Вы могли добавить verifyParameters
метод, который проверил их последовательность перед движением до creating
конечный объект. Это применимо в случаях, где создание объекта включает необратимые шаги, такие как запись в файл или базу данных.
Примечание, что, как со всеми шаблонами, это не применяется в каждом случае и не может применяться в Вашем. Если Ваш код достаточно прост затем, этот шаблон может быть сверхразработкой он. Если код становится грязным, осуществление рефакторинг в этот шаблон может быть хорошим способом упростить его.
public Booking createVehicleBooking(
Long officeId,
Long start,
Long end,
String origin,
String destination,
String purpose,
String requirements,
Integer numberOfPassengers)
throws ServiceException {
/*..Code..*/
}
I'be, склонный пойти об этом с несколькими объектами вместо всего один.
, Таким образом, это становится
public Booking createVehicleBooking(Long officeId, DateRange dates, TripDetails trip)
, В то время как DateRange и детали Прохождения содержат только соответствующие части данных. Хотя возможно dateRange мог быть частью прохождения, в то время как Требования и Число Пассажиров могли быть remoived от TripDetails и сделали часть запроса.
На самом деле существует несколько способов поставить на карту данные, но я должен был бы сказать, что повреждение Вашего большого списка в группы связанных параметров и создания объекта для них позволит более ясный стиль программирования и увеличит возможное повторное использование.
И помнят, что всегда возможно встроить объекты в объекте, таким образом разрешающем Вам иметь
public Booking createVehicleBooking(BookingParameters parameters)
, В то время как BookingParameters Содержит объекты TripDetails и DateRange, а также другие параметры.