Sie können IN zusammen mit json_array_elements auch direkt verwenden:
Recipe.where("'405' IN (SELECT json_array_elements(data->'category_ids')::text)")
Und wenn Ihre Spalte eine jsonb-Spalte ist, können Sie ähnlich vorgehen:
Recipe.where("'405' IN (SELECT jsonb_array_elements(data->'category_ids')::text)")