Вам нужно перебрать свой массив вместо того, чтобы просто брать из него первое значение.Я не понимаю, какие параметры у вас есть, поэтому я предполагаю, что вы хотите сделать свои find_by
, используя хэш client_id
и skipped_at
.
Также в Ruby 2.3.0 введен оператор безопасной навигации, которым является &.
, если вы к нему не привыкли.http://mitrev.net/ruby/2015/11/13/the-operator-in-ruby/
Поскольку find_by
возвращает либо объект ActiveRecord, либо nil, самое время использовать оператор безопасной навигации, чтобы сократить время.
def client_skipped_days_params
params.permit(client_skipped_days: %i[client_id skipped_at])[:client_skipped_days]
end
def check_client_on_exist
client_skipped_days_params.each do |day|
ClientSkippedDay.find_by(day)&.destroy
end
end
Обратите внимание, я не уверен, каков ваш хэш client_skipped_day.Я предположил, что вы позволяете удалить один день или удалить навалом.Я бы предостерег от того, чтобы это делало две вещи.Просто сделайте так, чтобы клиент всегда отправлял массив для этого действия, и вам будет легче.Если вы можете сделать это, тогда вы можете сделать client_skipped_days
обязательным.
def client_skipped_days_params
params.require(:client_skipped_days).permit(%i[client_id skipped_at])
end
Это вызовет ошибку 422 для клиента, если он не предоставит ключ client_skipped_days.
Если это невозможно, вам нужно добавить if
к check_on_exist
, чтобы убедиться, что client_skipped_days_params
не равно нулю (потому что они используют client_skipped_day
).