Шаблон, который мне нравится использовать, - next
. По сути, это способ «вернуться рано» из блока и разделить ваши условия на несколько операторов. Просто убедитесь, что вы добавили true
в конце, чтобы, если элемент прошел все проверки, он был включен в результат.
result = array.select do |item|
if params[:user_id]
next if item[:user_id] != params[:user_id]
end
if params[:start_date]
next if item[:start_date] <= params[:start_date]
end
if params[:end_date]
next if item[:end_date] >= params[:end_date]
end
true
end
вы, конечно, можете изменить все эти if .. else
блоки на один лайнер, если вы предпочитаете:
result = array.select do |item|
next if params[:user_id] && item[:user_id] != params[:user_id]
next if params[:start_date] && item[:start_date] <= params[:start_date]
next if params[:end_date] && item[:end_date] >= params[:end_date]
true
end